2012-02-18 30 views
5

私は、AbstractTypeを拡張するPostTypeフォームを持っています。コントローラでは、特定の条件が満たされている場合は、フィールドを追加したいと思います。何とかこれを行うことができますか、コントローラのFormTypeを変更するためのベストプラクティスがありますか?私はあなたがあなたのフォームにブール値のオプションを追加し、あなたのコントローラで設定するべきだと思いフィールドをFormTypeフォームに動的に追加することはできますか?

おかげ

答えて

5

Form Eventsを使用するとできます。

+0

ありがとう、これは私の必要な解決策のようです。 – DavidW

2

。あなたはきれいなM(V)C分離を持っているでしょう。

+0

これは良い選択肢かもしれません。 FormTypeで利用可能なadd()関数がない理由が考えられます – DavidW

+0

こんにちはDavid、2.2に追加されたようです。http://api.symfony.com/2.2/Symfony/Component/Form/FormInterface.html# method_add – Acyra

4

確かにフォームのコレクションタイプを使用してフィールドを動的に追加できます。 以下のリンクを参照してください。これは、フィールドを動的に作成する方法に役立ちます。

Link1: Dynamic Field in Symfony2

Link2: Form Collection in symfony2 doc

これら2つのリンクがあなたのお役に立てば幸いです。 ハッピーコーディング..

+0

コレクションですか?これが私が探しているものかどうかは分かりません。 – DavidW

7

みましょうあなたは以下の通りのFileTypeタイプのフォームを持っていると言う:

<?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); 

1つのフィールド(の名前)を含む。 別の関数でフォームオブジェクトにフィールドを追加する必要がある場合は、FileTypeを拡張して、必要なフィールドを追加することができます。たとえば、名前フィールドを編集したいが、前の状態を追跡したい場合は、オリジナル名フィールドを追加します。

<?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を助けることを願っています。o )

関連する問題