【发布时间】:2013-12-27 12:42:15
【问题描述】:
我有一个注册表单。
namespace User\Form;
use Zend\Form\Form;
class Register extends Form {
public function __construct() {
parent::__construct('register');
$this->setAttribute('action', 'new-account');
$this->setAttribute('method', 'post');
//$this->setInputFilter(new \User\Form\RegisterFilter); - used this prior to learning Fieldset
$this->add(new \User\Form\RegisterFieldsetUser);
// Submit
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Register',
'class' => 'btn btn-primary',
),
));
}
}
和用户字段集: (为了简短起见,我只留在场上)
namespace User\Form;
use Zend\Form\Fieldset;
class RegisterFieldsetUser extends Fieldset {
public function __construct() {
parent::__construct('user');
// User Identifier
$identifier = new \Zend\Form\Element\Email();
$identifier->setName('identifier');
$identifier->setAttributes(array(
'id' => 'user-email',
'placeholder' => 'Email'
));
$identifier->setLabel('Your email:');
$this->add($identifier);
}
public function getInputFilterSpecification() {
return array(
'identifier' => array(
'filters' => array(
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'break_chain_on_failure' => true,
'options' => array(
'messages' => array(
\Zend\Validator\NotEmpty::IS_EMPTY => 'You really have to enter something!',
),
),
),
array(
'name' => 'EmailAddress',
'options' => array(
'messages' => array(
\Zend\Validator\EmailAddress::INVALID_FORMAT => 'Hmm... this does not look valid!',
),
),
),
),
),
);
}
}
这是我的行动:
public function registerAction() {
$registerForm = new \User\Form\Register;
if ($this->getRequest()->isPost()) {
// Form processing
$formData = $this->getRequest()->getPost();
if ($registerForm->isValid()) {
// Yeeeeei
} else {
$registerForm->setData($formData);
return new ViewModel(array(
'form' => $registerForm,
));
}
} else {
return new ViewModel(array(
'form' => $registerForm,
));
}
}
现在,如果我在不输入任何内容的情况下提交表单,我会收到消息:“值是必需的,不能为空”(这不是我设置的消息)。但这不是我设置的消息的问题,因为如果我使用无效的电子邮件地址(“asd/”)提交表单,那么它什么也不会说,也不会出现验证错误。所以,我假设这里没有进行验证。
有什么线索吗? 在学习使用文件集之前,我有一个非常好用的 InputFilter,但是按照本书的学习曲线,我开始使用 Fieldset。
我只是一个 zf 新手,正在学习我从leanpub 购买的这本书(Michael Romer 的“使用 zf2 进行 Web 开发”)。我不知道书中使用的版本(最后一次更新是在 2013 年 8 月),但我使用的是最新的(2.2.5)。
【问题讨论】:
-
我认为该错误消息与
name字段有关,因为您没有对其值指定任何验证,也没有指出是否需要它。在这种情况下,ZF2 将字段标记为必填项,然后附加默认的 NotEmpty 验证器。而且我不认为在没有任何验证的情况下留下任何字段是个好主意。首先在'name' => ...设置数组元素'required' => false之后,如果消息消失,则问题已定位。 -
@Microbe 我不确定我是否明白你所说的“因为你没有指定任何验证......”。 “getInputFilterSpecification”中没有指定验证吗?另外......我没有得到我应该把'required' => false(是['identifier'] ['required'] => false吗?在“getInputFilterSeciffication”的返回数组中)我试过了, 不用找了。我还有其他带有“NotEmpty”和“StringLength”的字段(如密码字段),带有不会触发的最小/最大验证。为什么其他字段也没有出现相同的验证错误(“需要值 [...]”)?
-
对不起,我的错误,我错误地理解了你的代码。我会发布一个答案。
标签: php validation zend-framework2 zend-form fieldset