Symfony2フォーム-フォームビルダーでパラメーター化されたコンストラクターを使用する方法

Sp3igel

私はSymfony2の使い方を学んでおり、読んだドキュメントでは、Symfonyフォームで使用されているすべてのエンティティに空のコンストラクターがあるか、まったくありません。(例)

http://symfony.com/doc/current/book/index.html第12章
http://symfony.com/doc/current/cookbook/doctrine/registration_form.html

作成時に特定の情報要求するためにコンストラクターをパラメーター化しましたSymfonyのアプローチは、その強制を検証プロセスに任せ、本質的にメタデータアサーションとデータベース制約に依存してオブジェクトが適切に初期化されるようにし、コンストラクター制約を使用して状態を保証しないようです。

考えてみましょう:

Class Employee {
    private $id;
    private $first;
    private $last;

    public function __construct($first, $last)
    {  ....   }
}

...
class DefaultController extends Controller
{
    public function newAction(Request $request)
    {
        $employee = new Employee();  // Obviously not going to work, KABOOM!

        $form = $this->createFormBuilder($employee)
            ->add('last', 'text')
            ->add('first', 'text')
            ->add('save', 'submit')
            ->getForm();

        return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
            'form' => $form->createView(),
        ));
    }
}

これを行うためにコンストラクター引数を使用するべきではありませんか?

ありがとう

編集:以下に回答

Sp3igel

解決策を見つけました:

コントローラの「createForm()」メソッドのAPIを調べたところ、例からは明らかではないものが見つかりました。2番目の引数は必ずしもオブジェクトではないようです。

**Parameters**
    string|FormTypeInterface     $type  The built type of the form
    mixed                        $data  The initial data for the form
    array                        $options   Options for the form 

したがって、エンティティのインスタンスを渡すのではなく、適切なフィールド値を使用して配列を渡すことができます。

$data = array(
    'first' => 'John',
    'last' => 'Doe',
);
$form = $this->createFormBuilder($data)
    ->add('first','text')
    ->add('last', 'text')
    ->getForm();

もう1つのオプション(より良い場合があります)は、フォームクラスのデフォルトオプションとして空のデータセットを作成することです。ここここの説明

class EmployeeType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('first');
        $builder->add('last');
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'empty_data' => new Employee('John', 'Doe'),
        ));
    }
    //......
}

class EmployeeFormController extends Controller
{
    public function newAction(Request $request)
    {
        $form = $this->createForm(new EmployeeType());
    }
    //.........
}

これが他の人の頭を悩ませるのを防ぐことを願っています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

フォームビルダーの外部でSymfony2フォームデータを設定する

分類Dev

Symfony2はカスタムフォルダー内にコントローラーを生成します

分類Dev

パラメータ付きのsymfony2検索フォームクエリビルダー

分類Dev

デフォルトのコンストラクターからパラメーター化されたコンストラクターを呼び出す方法?

分類Dev

Symfony2フォーム処理

分類Dev

symfony2フォームの検証

分類Dev

Symfony2日時フォーム

分類Dev

フォームビルダーなしでSymfony2編集

分類Dev

デフォルトのパラメーターを持つ関数をテンプレート化されたコンストラクターに渡して、ラムダを使用してstd :: function <void()>として保存しないのはなぜですか?

分類Dev

Symfony2フォームquery_builderとパラメーター

分類Dev

symfony2コントローラーから埋め込みフォームのフォームフィールドを削除する方法

分類Dev

Symfony2フォームウィジェットクラス

分類Dev

Symfony2フォームタイプクエリビルダー

分類Dev

GWTプラットフォームで(setInSlotを使用して)UiBinderのコンストラクタービューにパラメーターを渡す方法は?

分類Dev

WinForms.NETのCreateParamsでフォームコンストラクターに渡されたパラメーターを使用します

分類Dev

symfony2でフォームajaxを送信する方法は?

分類Dev

symfony2でフォームajaxを送信する方法は?

分類Dev

Symfony2フォームでjquery-addresspickerを使用する

分類Dev

エンティティフォームタイプのSymfony2トランスフォーマー

分類Dev

Symfony2コンテナ対応フォームタイプ

分類Dev

Symfony2フォームはattr属性にトランスレータを使用します

分類Dev

Symfony2:送信されたデータに基づいてコレクションで異なるフォームタイプを使用する

分類Dev

Symfony2フォーム要素にエラーを追加

分類Dev

Symfony2:ラジオボタン選択フォームでデータベースからデフォルト値を設定しますか?

分類Dev

Symfony2フォーム-親フォームのデータにアクセスする

分類Dev

Symfony2でサービスのフォームを作成する

分類Dev

Symfony2のHTMLフォームデータにアクセスする

分類Dev

Symfony2の作成/更新フォームでリンクされたエンティティを管理する方法

分類Dev

symfony2のコントローラーに埋め込まれたフォームフィールドにエラーをバインドします

Related 関連記事

  1. 1

    フォームビルダーの外部でSymfony2フォームデータを設定する

  2. 2

    Symfony2はカスタムフォルダー内にコントローラーを生成します

  3. 3

    パラメータ付きのsymfony2検索フォームクエリビルダー

  4. 4

    デフォルトのコンストラクターからパラメーター化されたコンストラクターを呼び出す方法?

  5. 5

    Symfony2フォーム処理

  6. 6

    symfony2フォームの検証

  7. 7

    Symfony2日時フォーム

  8. 8

    フォームビルダーなしでSymfony2編集

  9. 9

    デフォルトのパラメーターを持つ関数をテンプレート化されたコンストラクターに渡して、ラムダを使用してstd :: function <void()>として保存しないのはなぜですか?

  10. 10

    Symfony2フォームquery_builderとパラメーター

  11. 11

    symfony2コントローラーから埋め込みフォームのフォームフィールドを削除する方法

  12. 12

    Symfony2フォームウィジェットクラス

  13. 13

    Symfony2フォームタイプクエリビルダー

  14. 14

    GWTプラットフォームで(setInSlotを使用して)UiBinderのコンストラクタービューにパラメーターを渡す方法は?

  15. 15

    WinForms.NETのCreateParamsでフォームコンストラクターに渡されたパラメーターを使用します

  16. 16

    symfony2でフォームajaxを送信する方法は?

  17. 17

    symfony2でフォームajaxを送信する方法は?

  18. 18

    Symfony2フォームでjquery-addresspickerを使用する

  19. 19

    エンティティフォームタイプのSymfony2トランスフォーマー

  20. 20

    Symfony2コンテナ対応フォームタイプ

  21. 21

    Symfony2フォームはattr属性にトランスレータを使用します

  22. 22

    Symfony2:送信されたデータに基づいてコレクションで異なるフォームタイプを使用する

  23. 23

    Symfony2フォーム要素にエラーを追加

  24. 24

    Symfony2:ラジオボタン選択フォームでデータベースからデフォルト値を設定しますか?

  25. 25

    Symfony2フォーム-親フォームのデータにアクセスする

  26. 26

    Symfony2でサービスのフォームを作成する

  27. 27

    Symfony2のHTMLフォームデータにアクセスする

  28. 28

    Symfony2の作成/更新フォームでリンクされたエンティティを管理する方法

  29. 29

    symfony2のコントローラーに埋め込まれたフォームフィールドにエラーをバインドします

ホットタグ

アーカイブ