2013-03-01 60 views
1

我有我的網站上的許多頁面上呈現的聯繫表單,我需要在許多不同的控制器中處理此表單。如何在所有這些控制器中處理這種形式? 我不想定義特殊的路由和控制器來處理這種形式,我需要在它所呈現的所有頁面中處理它。Symfony 2 - 在不同頁面上的相同形式

現在我'呼叫控制器acction女巫使我的形式方式:

在控制器:

$profileAskFormResponse = $this->forward('MyBundle:Profile:profileAskForm', array(
       'user' => $user, 
      ));   
    if ($profileAskFormResponse->isRedirection()) 
       return $profileAskFormResponse; 

    return $this->render(MyBundle:Single:index.html.twig', array(
       'myStuff' => $myStuff, 
       'profileAskForm' => $profileAskFormResponse, 
    )); 

而且在樹枝:

{{ profileAskForm.content|raw }} 

我'使用這個代碼是我需要處理我的聯繫表單的每個控制器。有沒有更簡單的方法來做到這一點? 我的第一個想法是做這種東西在樹枝:

{% render 'MyBundle:Profile:profileAskForm' with {request: app.request, user: user} %} 

但形式發送後,我不能從那裏重定向。問題的關鍵是,是否有一個笑着快速的方法調用(例如

從樹枝

)這有點像我的聯繫表格組件,不僅使一些東西,但有一些

應用程序邏輯組件它。我很樂意將這種組件用作磚頭女巫,我可以將它放在任何地方。

+0

顯示您現在如何調用表單。 – mkaatman 2013-03-01 20:02:34

回答

0

一種可能性是創建類似Contact.php的類,其中所有字段都是類成員。然後,您可以添加斷言每個字段非常容易:

/** 
    * @Assert\NotBlank(message="Please fill in your e-mail at least") 
    * @Assert\Email(checkMX = true) 
    */ 
protected $email; 

比你可以創建這個類叫做ContactType.php表單類型,並使用它FormBuilder

$builder->add('email', 'email', array('label' => 'E-mail')); 

在所有的控制器,你可以再重新使用表格。你甚至可以用它處理你發送的所有電子郵件的電子郵件類擴展它比注射有效的聯繫表格到它:

$contact = new Contact(); 
$form = $this->createForm(new ContactType(), $contact); 

if ($request->getMethod() == 'POST') { 
    $form->bindRequest($request); 

    if ($form->isValid()) { 
     // now you can easily inject the class to the one that handles e-mail traffic for example 
     $email = new Email(); 
     $email->sendContactForm($contact); 
    } 
} 

您可以在Symfony2 Cookbook: Forms閱讀更多關於它的深度。

相關問題