私のアクションは: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開発者が優れたソリューションを思い付くほどスマートであると思っていますが、私はそれを見つけることができません...手がかりはありますか?
これは間違っています。 CSRFトークンはフォームによって作成されます。これはあなたが提案した上記のコードを使用するか、テンプレート内で 'echo $ form-> renderHiddenFields();'を使ってレンダリングされます。レンダリングを選択したかどうかにかかわらず、エラーは引き続き発生します。 –