假設我有三個字段供用戶輸入日期:日,月和年。 (可能不是最好的方法,但我用這個例子)。如果我嘗試$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