FormType默认输入值采用相同的形式

时间:2013-03-24 14:00:56

标签: php forms symfony symfony-2.2

我有一个名为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 »

2 个答案:

答案 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;
    }
}