Почему sfValidatorDoctrineChoice не проверяется? - PullRequest
0 голосов
/ 29 марта 2012

Я пытаюсь установить в раскрывающемся списке «Требуется», но форма все еще проходит.Что я делаю не так?

Вот код:

this->exportForm = new sfForm();
$widgets['sheet_type'] = new sfWidgetFormDoctrineChoice(array('model' => 'ExportSheet', 'add_empty' => true));
$this->exportForm->setWidgets($widgets);
$this->exportForm->setValidators(array('sheet_type' => new sfValidatorDoctrineChoice(array('model' => 'ExportSheet', 'required' => true), array('required' => 'Please select a sheet type to export.') )));

ОБНОВЛЕНИЕ:

Я внес предложенные изменения.

действия.class.php:

$this->exportForm      = new sfForm();
$this->exportForm->getWidgetSchema()->setNameFormat('exportForm[%s]');
$widgets['sheet_type'] = new sfWidgetFormDoctrineChoice(array('model' => 'ExportSheet', 'add_empty' => true));

$this->exportForm->setWidgets($widgets);
$this->exportForm->setValidators(array('sheet_type' => new sfValidatorDoctrineChoice(array('model' => 'ExportSheet', 'required' => true), array('required' => 'Please select a sheet type to export.') )));


if ($request->isMethod('post'))
{
    $this->exportForm->bind($request->getParameter('exportForm'));

        if ($this->exportForm->isValid())
        {
                        ...
                    }
}

Шаблон:

<form method="post" action="<?php echo url_for('@export'); ?>">
<div id="export" style="display: block"> 
<?php echo $exportForm['sheet_type']->renderRow(); ?>
</form>

Я вижу, когда подтверждаю, что повторяющийся $ request-> getParameter ('sheet_type') действительно возвращает значение.Если это так, почему проверка по-прежнему не проходит?

1 Ответ

0 голосов
/ 29 марта 2012

Проверка правильности формы состоит из двух частей ... первая - это добавление валидаторов, вторая - проверка ее правильности ....

возьмите этот пример:

public function executeSomeaction(sfWebRequest $request)
{
   // Define the form
   this->exportForm = new sfForm();
   $widgets['sheet_type'] = new sfWidgetFormDoctrineChoice(array('model' => 'ExportSheet', 'add_empty' => true));
   $this->exportForm->setWidgets($widgets);
   $this->exportForm->setValidators(array('sheet_type' => new sfValidatorDoctrineChoice(array('model' => 'ExportSheet', 'required' => true), array('required' => 'Please select a sheet type to export.') )));

  // Deal with the request
  if ($request->isMethod('post'))
  {
    $this->exportForm->bind($request->getParameter(<your form>));
    if ($this->exporForm->isValid())
    {
      // Handle the form submission
      // ...

      $this->redirect('foo/bar');
    }
  }
}

Это только вторая часть в if ($request->isMethod('post')), которая применяет вашу проверку и проверяет данные, предоставленные пользователем. См. Здесь в документации Symfony об обработке форм с проверкой

Если вы используете следующее для добавления схемы именования для вывода формы, тогда получить все результаты легко ....

$this->exportForm->getWidgetSchema()->setNameFormat('exportForm[%s]');

, тогда вы можете получить использование:

$this->exportForm->bind($request->getParameter('exportForm'));

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

Обновление

необходимо указать

$this->exportForm->getWidgetSchema()->setNameFormat('exportForm[%s]');

после

$this->exportForm->setWidgets($widgets);

, так как метод setWidgets сбрасывает формат именования

...