我对表单有以下操作。在 MyForm 定义中,我添加了 post 验证器,因此我可以通过特定条件一次验证两个字段。问题来了,在通过验证后,symfony 向我发送一个错误,并将空值存储在数据库的新记录中。我在这里发布我的代码......我的表单只有两个字段,用户最多从两个列表中选择每个字段来创建新记录。受模式限制,这两个字段的组合是唯一的。此外,我需要验证这些字段的某些组合不允许创建新记录。
动作.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 会抛出以下错误:
警告: 在第 169 行的 /path/to/symfony/lib/plugins/sfDoctrinePlugin/lib/form/sfFormDoctrine.class.php 中为 foreach() 提供的参数无效
可捕获的致命错误: * 传递给 Doctrine_Record::fromArray() 的参数 1 必须是一个数组,给定 null,在第 150 行的 /path/to/symfony/lib/plugins/sfDoctrinePlugin/lib/form/sfFormDoctrine.class.php 中调用并在第 1970 行的 /ṕath/to/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record.php 中定义*
警告: 在第 1973 行的 /path/to/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record.php 中为 foreach() 提供的参数无效
然后是一些关于无法修改标题以响应的警告/错误(但我自己没有修改任何内容,也许只是操作 Create 方法中的 $this->setTemplate('new') ......
我正在使用 Symfony 1.4.9,但也尝试使用 SVN 服务器(rev 32070)的 1.4 开发分支并得到相同的结果。阿帕奇 2.2、PHP 5.2.6