[英]Modify form value after submit in symfony2
我有這樣的形式:
名稱(必填)。
slu(必需的)。
后端需要slug
,但允許用戶在表單字段中留空(如果用戶將slug留空,則將使用name
作為輸入)。
我已嘗試使用Event form listener
但它表示您無法更改提交表單的值 。 我試過像這樣的Data transformers
:
public function reverseTransform($slug)
{
if ($slug) {
return $slug;
} else {
return $this->builder->get('name')->getData();
}
}
return $this->builder->get('name')->getData();
總是返回null。 所以我試着這樣:
public function reverseTransform($slug)
{
if ($slug) {
return $slug;
} else {
return $_POST['category']['name'];
}
}
它有效,但我認為它反對框架。 我怎么能以正確的方式做到這一點?
您也可以在控制器中執行此操作
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
// get the data sent from your form
$data = $form->getData();
$slug = $data->getSlug();
// if no slug manually hydrate the $formObject
if(!$slug)
{
$formObject->setSlug($data->getName());
}
$em->persist($formObject);
$em->flush();
return ....
}
}
如果您使用函數將代碼保存在一個位置,那么您也應該不使用請求數據。 在表單操作中,您調用該函數,包括name變量。
public function reverseTransform($name, $slug)
{
if (!empty($slug)) {
return $slug;
} else {
return $name;
}
}
另一種可能的方法是通過請求類設置如下:
數組形式 <input name="tag['slug']"...>
:
public function createAction(Request $request)
{
$postData = $request->request->get('tag');
$slug = ($postData['slug']) ? $postData['slug'] : $postData['name'];
$request->request->set('tag', array_merge($postData,['slug' => $slug]));
.......
常用表格 <input name="slug"...>
:
$request->request->set('slug', 'your value');
我認為這是最好的方法,因為如果您使用的是dml-filter-bundle
,則不需要再次在控制器中過濾輸入:
$this->get('dms.filter')->filterEntity($entity);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.