5

これは本当に奇妙で、Twig テンプレートを更新した後に発生しました。

コントローラー部分

    $registration = new Registration();
    $form = $this->createForm(new RegistrationType(), $registration, array(
        'action' => $this->generateUrl('account_create'),
    ));

    return $this->render(
        'AcmeCommonBundle:Security:register.html.twig',
        array(
            'form' => $form->createView(),
            'contentBackColor' => 'canvasGreen'
            )
    );

テンプレート部分

{{ form_start(form) }}
    {{ form_errors(form) }}

    <p>All Fields Are Required</p>

    <div class="form-row">
        {{ form_label(form.firstname, "First Name") }}
        {{ form_widget(form.firstname) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.firstname) }}
    </div>

    <div class="form-row">
        {{ form_label(form.lastname, "Last Name") }}
        {{ form_widget(form.lastname) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.lastname) }}
    </div>

    <div class="form-row">
        {{ form_label(form.username, "Username") }}
        {{ form_widget(form.username) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.username) }}
    </div>

    <div class="form-row">
        {{ form_label(form.email, "Email") }}
        {{ form_widget(form.email) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.email) }}
    </div>

    <div class="form-row">
        {{ form_label(form.password, "Password") }}
        {{ form_widget(form.password) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.password) }}
    </div>

    <div class="form-row">
        {{ form_label(form.confirm, "Confirm Password") }}
        {{ form_widget(form.confirm) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.confirm) }}
    </div>

    <div class="form-row">
        {{ form_label(form.terms, "Terms & Conditions") }}
        {{ form_widget(form.terms) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.terms) }}
    </div>

{{ form_end(form) }}

エラー

Argument 1 passed to Symfony\Component\Form\FormRenderer::searchAndRenderBlock() must be an instance of Symfony\Component\Form\FormView, null given

はっきりとわかるように、私は実際に FormView をレンダリングしています。それが null であるという事実は、これが RegistrationType() クラスに関連していると信じさせますが、そこでは何も変更されておらず、レンダリングするテンプレートだけでしょうか?

4

1 に答える 1

5

わかりました、これは本当に具体的で、私はそれを理解したので、Googleでこれを見つけた人のためにここで更新すると思いました.

問題は、フォームの元の実装が小枝で次のようになったことです。

{{ form(form) }}

これが行うことは、変数全体をform調べて、表示すべきものをすべて表示することです。

問題は、ビュー変数が間違っていたことです。これは、オブジェクトが次のようなフィールドとしてRegistrationType()別のオブジェクトを追加したためです。UserType()user

->add('user', new UserType())

これは、呼び出しが次のことを意味します。

{{ form_label(form.firstname, "First Name") }}

になるはずだった:

{{ form_label(form.user.firstname, "First Name") }}

私がこのエラーをキャッチできなかった主な理由は、Twig が提供するエラーがどのフォーム呼び出しで失敗したかを教えてくれなかったため{{ form_start(form) }}です。しかし、その電話は大丈夫でした。

表示された HTML を見て、どこまで進んでいるかに気付き、問題のある特定の行を調査することになりました。

Twig テンプレート次のようになり、正しくレンダリングされます。

{{ form_start(form) }}
    {{ form_errors(form) }}

    <p>All Fields Are Required</p>

    <div class="form-row">
        {{ form_label(form.user.firstname, "First Name") }}
        {{ form_widget(form.user.firstname) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.user.firstname) }}
    </div>

    <div class="form-row">
        {{ form_label(form.user.lastname, "Last Name") }}
        {{ form_widget(form.user.lastname) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.user.lastname) }}
    </div>

    <div class="form-row">
        {{ form_label(form.user.username, "Username") }}
        {{ form_widget(form.user.username) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.user.username) }}
    </div>

    <div class="form-row">
        {{ form_label(form.user.email, "Email") }}
        {{ form_widget(form.user.email) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.user.email) }}
    </div>

    <div class="form-row">
        {{ form_label(form.user.password.password, "Password") }}
        {{ form_widget(form.user.password.password) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.user.password.password) }}
    </div>

    <div class="form-row">
        {{ form_label(form.user.password.confirm, "Confirm Password") }}
        {{ form_widget(form.user.password.confirm) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.user.password.confirm) }}
    </div>

    <div class="form-row">
        {{ form_label(form.terms, "Terms & Conditions") }}
        {{ form_widget(form.terms) }}
        <div class="clear-fix"></div>
    </div>
    <div class="form-errors-row">
        {{ form_errors(form.terms) }}
    </div>

{{ form_end(form) }}
于 2013-09-30T21:31:03.913 に答える