Предварительно загрузить значение в поле в форме Symfony, получая ошибку «Не удается обновить поля формы» - PullRequest
0 голосов
/ 18 мая 2011

У меня есть форма, которая должна создать очень простую новую запись в базе данных.Одно из полей в этой таблице связано с другой таблицей.В частности, есть событие, которое посещают люди, и мне нужно назначить людей на событие.Каждое событие может посещать несколько человек, и может быть несколько событий.

Когда пользователь с правами администратора добавляет участников к событию, мне не нужно, чтобы он выбирал событие в реальной форме, это должно быть передано черезURL.например, event/new/id/1

Однако я действительно пытаюсь понять, как включить этот идентификатор в форму.Если я пытаюсь вручную установить значение поля, я получаю ошибку Cannot Update Form Fields например

    $this->['attendanceSuccess_id'] = 1;

Если я пытаюсь скрыть поле:

$this->widgetSchema['attendanceSuccess_id'] = new sfWidgetFormInputHidden();

Форма показывает, но, очевидно, нетзначение передается, и я получаю сообщение об ошибке "обязательные поля обязательны для заполнения"

Это кажется очень простым и распространенным делом, но я не могу найти никаких решений!Как передать значение URL в форму, где поле указывает на другой класс?

1 Ответ

0 голосов
/ 18 мая 2011

Вот что я сделал.По сути, ваша форма содержит скрытый идентификатор, а ваше действие получает его из запроса и добавляет в форму в качестве опции.В форме вы также можете установить отношение к объектам Doctrine.

Ваша форма должна иметь что-то вроде (я не знаю, что ваша форма должна расширяться точно, так как вы используете Doctrine, а моя была в Propel)1003 *

class SomethingForm extends BaseSomethingForm {

public function __construct($object = null, $options = array(), $CSRFSecret = null)
{
    parent::__construct($object, $options, $CSRFSecret);
    if (isset($options['person_id']))
    {
        $this->getObject()->setPersonId($options['person_id']);
        $this->setDefault('person_id', $options['person_id']);
    }

}
}

public function configure()
{
    $this->setWidget('person_id', new sfWidgetFormInputHidden());
...more stuff...
}

Тогда ваше действие говорит:

$this->form = new SomethingForm(null, array(
'person_id' => $request->getParameter('person_id')
));
...