【发布时间】:2014-09-02 08:49:53
【问题描述】:
我在 Zend 2 表单中设置了一些验证器,但 isValid 总是返回 true,忽略它们。转储整个表单对象,看起来甚至没有附加验证器,这是表单代码:
namespace UserManagement\Form;
use Zend\Form\Form;
class SearchUserForm extends Form
{
public function __construct($name = null)
{
// we want to ignore the name passed
parent::__construct('SearchUser');
$this->setAttribute('method', 'post');
$this->add(array(
'name' => 'search',
'attributes' => array(
'type' => 'text',
'required' => true,
),
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 4,
'max' => 100,
),
)
),
));
然后在控制器中检查它是否有效:
if( $this->getRequest()->isPost() )
{
$searchForm->setData( $this->params()->fromPost() );
if( $searchForm->isValid() )
{
echo "yep";exit;
}
else
{
echo "nope";exit;
}
尽管字符串长度为 1,但始终输出“yep”。我实际上已经完成了这项工作,但将验证器放在单独的过滤器类中并将其附加到表单中 - 但我的问题是 应该 这工作吗?
【问题讨论】:
-
向表单添加字段和设置过滤器验证是两件不同的事情。检查此以供参考 - framework.zend.com/manual/2.3/en/user-guide/… 您始终可以在 Form 类本身中设置输入过滤器,但它的定义应该与向表单中添加字段分开。
标签: php forms validation zend-framework zend-framework2