2012-02-18 110 views

回答

5

您可以使用Form Events

+0

謝謝,這似乎是我需要的解決方案。 – DavidW 2012-02-19 09:24:18

2

我想你應該添加一個布爾選項,您的形式,並設置它在你的控制器。這樣你就可以有一個乾淨的M(V)C分離。

+0

這可能是一個不錯的選擇。我只是想知道爲什麼沒有 - > add()函數可用FormType – DavidW 2012-02-18 17:39:52

+0

嗨大衛,他們似乎已經補充說,在2.2 http://api.symfony.com/2.2/Symfony/Component/Form/FormInterface.html# method_add – Acyra 2013-03-06 15:12:05

7

讓說你有類型的表單文件類型如下:

<?php 
namespace EventFlowAnalyser\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class FileType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name', 'text', array('label' => 'Name')); 
    } 

    public function getName() 
    { 
     return 'file'; 
    } 
} 

你可以用它在你的控制器是這樣的:

$form = $this->createForm(new FileType(), $document); 

$文件是一個對象包含一個字段(名稱)。 現在,如果您需要將字段添加到其他函數中的表單對象,則可以擴展FileType以添加所需的字段;例如,如果要編輯名稱字段但仍想跟蹤以前的狀態,可以添加一個original_name字段。

<?php 
namespace EventFlowAnalyser\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

use EventFlowAnalyser\Form\EventListener\EditFileFieldSubscriber; 

class FileEditType extends FileType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildForm($builder, $options); 
     $builder->add('original_name', 'hidden', array('mapped' => false)); 
    } 
} 

現在,你可以使用擴展形式那樣:

$form = $this->createForm(new FileEditType(), $document); 

並修改字段的那樣值:

$form->get('original_name')->setData($document->name); 

我希望這將有助於somenone:○ )

相關問題