Drupal中$form_state的get与getValue方法获取rpms有什么区别?
二者存在本质功能差异,不属于笔误或冗余代码,分别读取FormState中完全不同的两类数据:
1. $rpm_selected = $form_state->getValue('rpms');
这是Drupal Form API专门用于读取用户提交的表单字段值的专用方法,参数'rpms'对应表单构建逻辑中声明的rpms表单字段的键名,拿到的是用户在该表单控件中实际输入/选择的提交结果。
2. $rpms = $form_state->get(['storage', 'rpms']);
$form_state->get()是读取FormState自定义存储数据的通用方法,这里传入的['storage', 'rpms']参数,是定位到FormState的storage属性下的rpms键值。storage区域的内容一般是开发者在表单的构建、验证、提交等生命周期阶段手动写入的自定义业务数据,和用户提交的表单字段值没有必然关联,通常用来存储跨步骤的临时状态、表单关联的数据源缓存等内容。
常见使用场景示例
比如开发多步骤的RPM选择表单时:
- 第一步用户选择操作系统版本后,开发者可以把该操作系统支持的全部RPM列表写入
$form_state->set('storage', ['rpms' => $全量支持的RPM数组]) - 第二步渲染表单时,用
$form_state->get(['storage', 'rpms'])拿到全量RPM列表渲染下拉选择框 - 用户选择某一个RPM提交后,用
$form_state->getValue('rpms')拿到用户选中的单个RPM值做后续处理
这种场景下两行代码各司其职,都有存在的必要性。排查故障时可以分别跟进两个变量的后续使用逻辑,确认是否符合上述的定位区分。
内容的提问来源于stack exchange,提问作者Mind Optimizer
相关产品推荐
相关产品推荐

