假设我有三个字段供用户输入日期:日,月和年。 (可能不是最好的方法,但我用这个例子)。如果我尝试$form->bind()
用户的请求,Symfony会尝试在我的模型上寻找一个不存在的->setMonth()
方法。一个属性的多个字段
我该如何告诉Symfony我想通过strtotime()
(或任何其他任何其他任意代码或方法)运行输入,然后将新输出映射到setDate()
?
假设我有三个字段供用户输入日期:日,月和年。 (可能不是最好的方法,但我用这个例子)。如果我尝试$form->bind()
用户的请求,Symfony会尝试在我的模型上寻找一个不存在的->setMonth()
方法。一个属性的多个字段
我该如何告诉Symfony我想通过strtotime()
(或任何其他任何其他任意代码或方法)运行输入,然后将新输出映射到setDate()
?
首先,您需要告诉symfony这些字段没有相应的Entity属性。这与“property_path”选项做这样的事情
$builder->add("field1", "text", array(
"property_path" => false
));
在你的控制器,一旦你已经检查了形式是有效的,持续的,你可以得到使用类似这些字段的值的实体之前完成:
$field1 = $form->get('field1')->getData();
,然后使用这些值来构建你的实体属性,因为你需要,例如:
$entity->setWhatever($field1.$field2.$field3);
如果您需要做某种验证在这些领域,你最好的选择是编写一个回调验证器。
使用:'mapped'=> false而不是“property_path”=> false。 – Daniel
不要在用户类的一个属性“date”中使用复数的html字段。
在参考:http://symfony.com/doc/current/reference/forms/types/date.html
,只要你想感谢选项“窗口小部件”字段日期可以呈现。在你的情况下,你需要3个字段,你必须设置值“choice”(呈现三个选择输入,选择的顺序是在pattern选项中定义的)。
在这里,在窗体类代码:
$builder->add('date', 'date', array(
'widget' => 'choice',
));
你也想获得一个时间戳(“的strtotime”)的形式提交后:
$builder->add('date', 'date', array(
'widget' => 'choice',
'input' => 'timestamp',
));
您可以用其他选项玩,例如,以获得只激活JS日期选择器的文本字段!
你真的想输入日期还是仅仅是一个例子? –
日期只是一个例子。我更想要一种在数据传递给setter之前拦截数据的方法。在我的具体情况下,有三个输入,它们被序列化在一起,然后存储为属性的值。 – Shane