2013-03-24 54 views
0

我有一个名为Task的实体并为表单构建一个Symfony TaskType.php。 我的目标是将endDate datetime字段默认设置为startDate datime字段(需要)的输入。FormType默认输入值的形式相同

我试过这个,但它不起作用。

$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任务(姓名,的startDate,结束日期)VALUES' 使用参数{ “1” 时发生异常,“2”:“2013-03-30 00:00:00”,“3”:null}:

SQLSTATE [23000]:完整性约束违规:1048'endDate'列不能为空 500内部服务器错误 - DBALException 1链接异常:

PDOException » 
+0

你能有点不是“它不工作”更具体?它怎么不起作用?错误消息,意外的行为?不幸的是,我们大多数人没有力量的帮助来帮助理解像这样的神秘错误描述:) – vascowhite 2013-03-24 14:37:13

+0

是的,当然,sry。我除了编辑帖子外, – ChrisS 2013-03-24 16:13:44

+0

好的,在错误信息中有你的答案。您试图将空值插入到不允许包含空值的列中。 – vascowhite 2013-03-24 16:32:01

回答

3

是的,当然是行不通的。我建议阅读关于表单是如何工作的,如果你没有时间阅读这个“表格” - 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()); 

希望它有帮助。

+0

谢谢,但是当我设置bindRequest后的数据时,我得到一个“你不能更改绑定窗体的数据” – ChrisS 2013-03-27 21:36:58

0

当它被实例化,您还可以设置你的实体类的值:

class Task 
{ 
    protected $startDate; 
    protected $endDate; 

    public function __construct($startDate) 
    { 
     $this->startDate = $startDate; 
     $this->endDate = $startDate; 
    } 
} 
+0

谢谢,但是当我去我的路由addTask,我得到“失踪参数1 for Task \ AppBundle \ Entity \ Task :: __ constructor ...“异常,因为他没有获得$ startdate的值,该如何处理? – ChrisS 2013-03-27 21:27:25

+0

当我把例如$任务=新的任务(新\日期时间('现在')); 在我的TaskController中,我可以打开addTask Route,但是当我将表单数据刷新到数据库时,endDate只有新的DateTime值而不是releaseDate表单数据 – ChrisS 2013-03-27 21:31:05