У меня есть следующее действие для формы.В определении MyForm я добавил пост-валидатор, так что я могу проверять два поля одновременно по определенному условию.Проблема возникает, когда после прохождения проверки symfony отправляет мне ошибку, а также сохраняет нулевые значения в новой записи в базе данных.Я публикую свой код здесь ... Моя форма имеет только два поля, и пользователь чаще всего выбирает каждое из них из двух списков, чтобы создать новую запись.Из-за ограничений схемы комбинация обоих полей уникальна.Кроме того, мне нужно проверить, что определенные комбинации этих полей не разрешены для создания новой записи.
actions.class.php:
public function executeNew(sfWebRequest $request)
{
$this->form = new MyForm();
}
public function executeCreate(sfWebRequest $request)
{
$this->forward404Unless($request->isMethod(sfRequest::POST));
$this->form = new MyForm();
$this->processForm($request, $this->form, true);
$this->setTemplate('new');
}
protected function processForm(sfWebRequest $request, sfForm $form, $new = false)
{
$form->bind($request->getParameter($form->getName()),
$request->getFiles($form->getName()));
if ($form->isValid())
{
$post = $form->save();
$this->redirect('post/' . $post->getId());
}
}
MyForm.class.php
class MyForm extends BaseMyForm
{
public function configure()
{
$this->widgetSchema['field1'] = new sfWidgetFormChoice(array('choices' => MyUtil::$field1_vaues));
$this->widgetSchema['field2'] = new sfWidgetFormChoice(array('choices' => MyUtil::$field2_values));
$this->mergePostValidator(new sfValidatorCallback(array('callback' => array($this, 'validateBothFields'))));
}
public function validateBothFields($validator, $values, $arguments)
{
if (MyUtil::fields_relation($values['field1'], $values['field2']))
{
throw new sfValidatorError($validator, "Fields relation invalid!");
}
}
}
Когда я закомментирую строку mergePostValidator, тогда все работает нормально, но тогда я не могу проверить условие не принимать определенную комбинацию двух моих полей.
И при использовании этого кодакак есть: если комбинация недействительна, все работает хорошо, форма снова появляется с 'Недопустимым отношением полей!'сообщение.Но если комбинация допустима, symfony выдает следующие ошибки:
Предупреждение: В foreach () указан неверный аргумент в / path / to / symfony / lib / plugins / sfDoctrinePlugin/lib/form/sfFormDoctrine.class.php в строке 169
Исправляемая фатальная ошибка: * Аргумент 1, передаваемый в Doctrine_Record :: fromArray (), должен быть массивом, равным нулюВызывается в /path/to/symfony/lib/plugins/sfDoctrinePlugin/lib/form/sfFormDoctrine.class.php в строке 150 и определяется в / ṕath / to / symfony / lib / plugins / sfDoctrinePlugin / lib / vendor / doctrine /Doctrine / Record.php on line 1970 *
Предупреждение: Указан неверный аргумент для foreach () в / path / to / symfony / lib / plugins / sfDoctrinePlugin / lib / vendor/doctrine/Doctrine/Record.php в строке 1973
, а затем некоторые предупреждения / ошибки о невозможности изменить заголовки в ответ (но я не изменяю их самостоятельно, и, возможно, это просто$ this-> setTemplate ('new') в действии Создать метод ...
Я использую Symfony 1.4.9, но также попробовал с веткой разработки 1.4 с сервера SVN (rev 32070) и получил тот же результат.Apache 2.2, PHP 5.2.6