Мое действие:
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 для заполнения значений по умолчанию для элементов формы.Но, очевидно, в этом объекте нет csrf_token
... Но он все еще пытается найти тот, который будет использоваться в качестве значения по умолчанию ...
И что произойдет, если у вас есть форма, в которой всегда естьдополнительные пустые поля, которые являются пустыми, но другие имеют значения по умолчанию, которые передаются.Если эти пустые поля не имеют заданных значений в Doctrine Collection, вы получите сообщение об ошибке ...
Теперь, очевидно, я мог бы заранее сделать простой массив, в котором я указал бы значения по умолчанию и передал бы это:
$defaults = array( 'title' => $article->title, 'text' => $article->text, 'author' => $article->author );
$this->form = new ArticleEditForm( $defaults);
Это работает.Моя проблема в том, что приведенная выше «статья» является примером по причинам простоты.На самом деле моя форма содержит около 30 полей.Таким образом, единственный способ работы этого решения - вручную указать 30 отдельных значений по умолчанию в массиве.Это плохое решение с точки зрения обслуживания, очевидно.
Я полагаю, что разработчики Symfony достаточно умны, чтобы найти хорошее решение, но я просто не могу его найти ... Никаких подсказок