我想将它们创建为对象,然后分配选项,如:
$name = new Zend\Form\Element\Text('name');
$name->setLabel('Your name:');
$name->setRequired(true); // does not work?
$this->add($name);
如何设置“必需”选项,如何设置验证器? Framework为setRequired()创建了异常“No method exists”。
P.S。我真的不想使用数组样式,当你在一个数组中有大量代码时,它会非常烦人。我的意思是:
$this->addElement('text', 'email', array(
'label' => 'Your email address:',
'required' => true,
'filters' => array('StringTrim'),
'validators' => array(
'EmailAddress',
)
));
答案 0 :(得分:2)
你误解了一件事,默认情况下验证器不是元素的一部分。
如果您希望元素本身包含一些验证器。您需要使元素实现InputProviderInterface,例如
use Zend\Form\Element;
use Zend\InputFilter\InputProviderInterface;
class MyElement extends Element implements InputProviderInterface
{
public function getInputSpecification()
{
$spec = array(
'name' => $this->getName(),
'required' => true,
'validators' => array(
'EmailAddress',
)
);
return $spec;
}
}
当表单验证开始时,表单的InputFilter将从表单元素中收集所有验证器并合并到最终验证器中。
但是,您也可以通过句柄形式InputFilter添加/删除表单验证器:
$form = new \Zend\Form\Form();
$form->add($yourElement);
$filter = $form->getInputFilter();
$filter->remove('email');
$filter->add(array(
'name' => 'email',
'required' => true,
'validators' => array (
'EmailAddress'
),
));
$form->setInputFilter($filter);
$form->setData(array(
'email' => 'abc',
));
$form->prepare();
echo $form->isValid();
print_r($form->getMessages());
答案 1 :(得分:0)
Zend表单选项setRequired只有带有选项验证器的worknig。你必须像这样定义这个元素的验证规则。
$this->review->addValidators(
array('NotEmpty',true, array( 'messages' => array( 'isEmpty' => "Please enter product Review.") ) )
);