我正在尝试将下拉设置为“必需”,但表单仍然存在。我做错了什么?
以下是代码:
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.') )));
更新:
我已经提出了修改建议。
的actions.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-&gt; getParameter('sheet_type')确实返回一个值时。如果是这种情况,为什么验证仍然失败?
答案 0 :(得分:0)
验证表单有两个部分......第一部分是添加验证器,第二部分是检查它是否有效......
举个例子:
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'))
中的第二部分应用您的验证并检查用户提交的数据。关于使用验证处理表单的See here in the symfony docs
如果您使用以下内容为表单输出添加命名方案,那么获取所有结果很容易....
$this->exportForm->getWidgetSchema()->setNameFormat('exportForm[%s]');
然后你可以使用:
$this->exportForm->bind($request->getParameter('exportForm'));
然后,这将获得包含所有字段值的数组并将其绑定到表单 - 准备好检查它是否有效。
您需要指定
$this->exportForm->getWidgetSchema()->setNameFormat('exportForm[%s]');
后
$this->exportForm->setWidgets($widgets);
因为setWidgets
方法重置命名格式