我有一个名为Task的实体,并为表单构建一个Symfony TaskType.php。 我的目标是默认将endDate datetime字段设置为startDate datime字段的输入(这是必需的)。
我试过这个,但它不起作用。
$builder->add('name');
$builder->add('startDate', 'datetime');
$builder->add('endDate', 'datetime', array(
'empty_value' => array('year' => 'Year', 'month' => 'Month', 'day' => 'Day'),
'required' => false,
'data' => isset($options['data']) ? $options['data']->getEndDate() : $options['data']->getStartDate(),
));
例外:
执行'INSERT INTO任务(name,startDate,endDate)VALUES(?,?,?)'时发生异常,并带有参数{“1”:“test”,“2”:“2013-03-30 00 :00:00" , “3”:空}:
SQLSTATE [23000]:完整性约束违规:1048列'endDate'不能为空 500内部服务器错误 - DBALException 1个链接异常:
PDOException »
答案 0 :(得分:3)
是的,当然不行。我建议您阅读有关表单的工作原理,如果您没时间阅读此“cheatsheet” - http://blog.stfalcon.com/wp-content/uploads/2012/01/how_symfony2_forms_works.pdf。
您可以在设置数据后设置值。例如,尝试:
$form->bindRequest($request);
// now you can get data and set
$form->get('endDate')->setData($form->get('startDate')->getData());
希望,这有帮助。
答案 1 :(得分:0)
您还可以在实例化实体类时设置它们的值:
class Task
{
protected $startDate;
protected $endDate;
public function __construct($startDate)
{
$this->startDate = $startDate;
$this->endDate = $startDate;
}
}