簡體   English   中英

在symfony2中提交后修改表單值

[英]Modify form value after submit in symfony2

我有這樣的形式:

  1. 名稱(必填)。

  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM