2017-08-23 13 views
1

最近、私はSymfony 2.8で非推奨の呼び出しを避けるためにTwigテンプレートを整理しました。Symfonyでform_endを使用すると内部サーバエラーが発生する

これは私のテンプレートがどのように見えるかです:

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

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

そして、これは私のコントローラは

public function someAction(Request $request) 
{ 
    $form = $this->createForm(new MyFormType(), null); 

    if ($request->getMethod() == 'POST') 
    { 
     // do something with the form contents 
     return $this->redirect($this->generateUrl('somewhere')); 
    } 
    return $this->render('::myform.html.twig', array(
     'form' => $form->createView(), 
    )); 
} 

どのように見えるかです:これは私のフォームはどのように見えるかです

{{ form_start(form, {'attr': {'class': 'form_template'} }) }} 
    {{ form_widget(form) }} 
    <input type="submit" value="Send"/> 
{{ form_end(form) }} 

テンプレートをレンダリングすると、Twigがform_end()関数をレンダリングするまでNDその後、私はPHPの設定でxdebug.max_nesting_level設定を増やしてみましたError: Maximum function nesting level of '100' reached, aborting! (500 Internal Server Error)

をスローしますが、それは助けていない、問題を解決し、私が見つけた唯一の修正は次のとおりです。醜い修正をある

{{ form_start(form, {'attr': {'class': 'form_template'} }) }} 
    {{ form_widget(form) }} 
    <input type="submit" value="Send"/> 
    {{ form_rest(form) }} 
</form> 

form_end(form)でこのようなエラーが発生するのはなぜですか?form_rest(form)ですべて正常に動作しますか?

+0

あなたはより多くのdetailledエラーメッセージを取得することはできませんか? –

+0

[埋め込みフォームコレクションのドキュメント](http://symfony.com/doc/2.4/cookbook/form/form_collections.html)には、そのメッセージを具体的に記述したメモがあります。 (私はそれに直接リンクすることはできませんが、そのページのメッセージを検索するだけです) –

+0

@tny私はそれを持っていますが、それは長くて痛いです @ Don'tPanicはい私はこのページに行ってきましたが、 'xdebug.max_nesting_level'を増やすことを奨励します – gogaz

答えて

0

form_widget(form)は、documentation on form collectionsに示されているように、フォーム全体を再帰的にレンダリングし、サーティファイアが最大ネストレベルを超えます。すべてのフィールドを手動でレンダリングすることで問題が解決されました。

を呼び出すと、form_rest(form)が呼び出されるので、これが不要な場合は、documentation on form functions and variablesにしたがって、残りのレンダリングを手動で無効にする必要がありました。

私は次の私の小枝テンプレートを変更する必要がありました:

{{ form_start(form, {'attr': {'class': 'form_template'} }) }} 
    {{ form_row(form.email) }} 
    <br/> 
    <input type="submit" value="Send"/> 
{{ form_end(form, {'render_rest': false}) }} 
関連する問題