$form_state 数组包含$ form_state['input'] 和$form_state['values']。通常这些元素没有区别,有时它们的结构不同,有时甚至含义不同。何时以及为什么会发生这种情况,为什么当两个元素通常完全相同时会出现?
用什么比较好?
$form_state 数组包含$ form_state['input'] 和$form_state['values']。通常这些元素没有区别,有时它们的结构不同,有时甚至含义不同。何时以及为什么会发生这种情况,为什么当两个元素通常完全相同时会出现?
用什么比较好?
$form_state['input']是来自请求中服务器的 $_POST 或 $_GET 数组的数据。
您可以通过以下方式了解。我们去上课吧
并查看 buildForm() 方法。在其中您可以看到以下行
$request - Symfony\Component\HttpFoundation\Request 类的对象,在方法中形成
$form_state['values']是基于
$form_state['input']
和#default_value
所有的魔法都发生在
直到创建
value
某个字段的那一刻,所有字段和表单本身都已被验证。对于每个字段,您可以指定这是一个函数,它应该返回将写入字段的值
$form_state['values']
例如,考虑分类术语字段,在创建材料时,您可以使用 Select 显示此字段。然后在表单中添加一个自定义提交函数并获取其中包含的字段的值,
$form_state['input']
您将有一个字符串term_id
,并基于此值执行您的逻辑。但是有人进来并将字段类型从 Select 更改为 Autocomplete ,仅此而已,您的自定义函数将不再起作用,因为字段 in
$form_state['input']
将不再具有带有 的字符串的值term_id
,而是具有 form 的字符串term_name (term_id)
。但
$form_state['values']
在这两种情况下,相同的字段将是表单的数组根据允许选择多少个值,数组中会有这么多元素。但它的结构永远不会改变。如果你需要这个数组,你可以马上保存
你不需要处理这个值,它已经是正确的格式。
这是与 的
values
区别input
。values
不依赖于显示字段的格式,它总是借助例如#value_callback
,带入一种格式,您可以安全地编写自己的功能,而不必担心它们会改变格式,例如。如果这是一个自定义表单,并且您需要准备要保存的字段,请在
#value_callback
. 此外,您无需更改$form_state['input']