2014-06-23 77 views
0

我在FOSUserbundle:Profile:showcontent.html.twig文件中創建了一個表單。我想知道用戶是否想訂閱新聞通訊。從簡單的表單獲取數據到控制器中

<form action="{{ path('fos_user_newsletter') }}" method="POST" 
        class="fos_user_newsletter" id="fos_user_newsletter"> 

        <input type="checkbox" name="test123" value="HTML" 


         {% if user.newsletterEnabled == 1 %} checked 


{% endif %} onclick="this.form.submit();"> Subscribe to Newsletter 

       </form> 

現在我想獲取控制器中的數據。

public function subscribeNewsletterAction(Request $    
      var_dump($request->request->all());die; 
     } 

這不顯示任何內容,我不能叫$form = $this->createFormBuilder($task)因爲它在FOSUserBundle

如果點擊複選框,我該如何獲取信息?我在做什麼想法錯誤?

回答

2

要清楚,如果您在FOSUserBundle/Resources/views/Profile/show_content.html.twig文件中創建了此表單,則不是這樣。您不應編輯vendor文件夾中的任何內容,因爲它們可能會被Composer覆蓋。

您必須將此表單放入src目錄中的模板中。

您應該使用Symfony創建一個簡單的表單來完成這項工作。

// make sure you've imported the Request namespace above the class 
use Symfony\Component\HttpFoundation\Request; 
// ... 

public function subscribeNewsletterAction(Request $request) 
{ 
    $form = $this->createFormBuilder($defaultData) 
     ->add('newsletter', 'choice', array(
      // ... 
     )) 
     ->getForm(); 

    $form->handleRequest($request); 

    if ($form->isValid()) { 
     $data = $form->getData(); 
    } 

    // ... render the form 
} 

Using a Form without a Class

+0

是該文件是在源文件夾。我需要用以下代碼替換createFormBuilder: \t \t $ form = $ this-> container-> get('form.factory') - > createBuilder() 因爲控制器找不到createFormBuilder 現在如何渲染形成一個現有的觀點?我想將其顯示在Profile:show.twig.html視圖中?意思就是複選框。 – joelschmid

+1

如果你使用bilder的形式,很容易渲染它,在你的控制器的響應: 返回$ this-> render('AcmeTaskBundle:Default:new.html.twig',array( 'form'= > $ form-> createView())); 如果你想要把它放進檔案FOSUserBundle頁面,您應該overdefine默認頁面是這樣的: 重寫模板: https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_templates .md 覆蓋控制器: https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_controllers.md – vobence