Как сделать поле формы не нужным для проверки в Symfony? - PullRequest
0 голосов
/ 20 мая 2011

У меня есть 2 формы: $patientForm и $investigationForm.

Они оба объединены в одно представление, поэтому пользователь заполняет поля, и 2 записи создаются в таблице пациента и таблице исследования.Таблица расследований имеет внешний ключ - имя пациента.Таким образом, у одного пациента может быть много исследований.

Так что мне, очевидно, нужен идентификатор пациента, чтобы добавить его в протокол исследования в качестве внешнего ключа.Однако идентификатор пациента не создается до тех пор, пока форма пациента не будет сохранена.

Итак, я разработал следующую функцию:

protected function processPatientInvestigation(sfWebRequest $request, sfForm $investigationForm, sfForm $patientForm)
{
    $patientForm->bind($request->getParameter($patientForm->getName()), $request->getFiles($patientForm->getName()));

    if ($patientForm->isValid() && $investigationForm->isValid() ) {        
        $patientForm->save();       
        $values = $request->getParameter($investigationForm->getName());
        $values['patient_id'] = $patientForm->getObject()->getId();
        $investigationForm->bind($values, $request->getFiles($investigationForm->getName()));
        $investigationForm->save();     
    }

Оператор if всегда терпит неудачу, поскольку $investigationForm недействителен, пока я не передам его полю формы значение patient_id.Так что это значение пусто на данный момент.Однако, если я просто взял isValid() форму для проверки $investigation и отложил ее позже после сохранения $patientForm.Это означает, что если он не прошел проверку и пользователь пропустил поле, когда он не нажимает кнопку «Отправить» снова, вся функция снова запустится, что означает, что у нас будут дубликаты записей о пациентах.

Так что я думаю, чтоответ заключается в том, что делает поле Patient_id не проверенным, поэтому оно может быть пустым и все же передавать функцию isValid().

Пожалуйста, дайте мне знать, если это не ясно.Надеюсь, вы можете посоветовать!

Ответы [ 3 ]

2 голосов
/ 20 мая 2011

Попробуйте следующее, хотя это действительно нужно сделать в методе настройки форм.

$patientForm->getValidator('patient_id')->addOption('required', false);
1 голос
/ 20 мая 2011

Более чистым решением было бы установить все ваши правила проверки в самом файле / lib / form / * Form.class.php (а не манипулировать им в ваших действиях).

$this->validatorSchema['patient_id'] = new sf*Validator(array(
  'required' => false
), array());

Если вы просто хотите оставить поле формы полностью без проверки, используйте

$this->validatorSchema['patient_id'] = sfValidatorPass()
0 голосов
/ 20 мая 2011

Я бы пошел со встроенными формами и позволил symfony правильно обработать сохранение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...