2011-08-04 4 views
0

私のアクションは:Symfony:Doctrine CollectionをFormにデフォルト値として渡すにはどうすればいいですか?

public function executeEdit(sfWebRequest $request) 
{ 
    // Get the object 
    $article = $this->getRoute()->getObject(); 

    // Create the form 
    $this->form = new ArticleEditForm($article); 
} 

あなたは$articleは、デフォルト値としてフォームに渡さ教義コレクションであることがわかります。 $articleオブジェクトは、「タイトル」、「テキスト」、「著者」などの分野など

が含まれています。しかし、これはフォームの作成中にエラーが発生します。

500 | Internal Server Error | Doctrine_Record_UnknownPropertyException 
Unknown record property/related component "_csrf_token" on "article" 

だから、基本的に、フォームをしようとしていますDoctrine Collectionを使用して、フォーム要素のデフォルト値を入力します。しかし、明らかにそのオブジェクト内にcsrf_tokenはありません...しかし、それはまだデフォルト値として使用するものを見つけることを試みています...

そして、余分な空のフィールド空であるが、他のものは渡されるデフォルト値を持つ。これらの空のフィールドにDoctrine Collectionの値が設定されていないと、エラーが発生します。

私は既定値を指定して渡す前に単純に単純な配列を作成して渡すことができます:

$defaults = array('title' => $article->title, 'text' => $article->text, 'author' => $article->author); 
$this->form = new ArticleEditForm($defaults); 

これは機能します。私の問題は、上記の「記事」が簡単にするための例であるということです。実際には私のフォームには約30のフィールドがあります。したがって、このソリューションが機能する唯一の方法は、アレイ内の30個の個別のデフォルト値を手動で指定することです。これは明らかに保守の観点からは貧弱な解決策です。

私は、Symfony開発者が優れたソリューションを思い付くほどスマートであると思っていますが、私はそれを見つけることができません...手がかりはありますか?

答えて

0

私の問題が見つかりました。私のカスタムフォームはBaseFormです。一度これを変更してBaseArticleFormにすると、記事Doctrine Collectionsをデフォルト値として正常に渡すことができました。

0

この問題は、あなたのフォームが_csrf_tokenを作成しないことに関するものです。テンプレートページでフォームを作成するときに追加できます。

<?php 
    echo $form->renderFormTag(url_for('article/edit')) 
    echo $form->render(); 
?> 
    <input type="hidden" name="form[_csrf_token]" value="<?= $form->getCSRFToken(); ?>"> 
    <input type="submit" value="Submit" /> 
</form> 
+0

これは間違っています。 CSRFトークンはフォームによって作成されます。これはあなたが提案した上記のコードを使用するか、テンプレート内で 'echo $ form-> renderHiddenFields();'を使ってレンダリングされます。レンダリングを選択したかどうかにかかわらず、エラーは引き続き発生します。 –

関連する問題