2013-03-24 55 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