Php Zend 2-向自定义表单添加验证程序和过滤器
我快发疯了。我创建了一个包含两个字段的简单表单。一个是文本字段,另一个是文本区域。表单看起来很棒,但不管我怎么尝试,我都不会验证 这是我的表格课:Php Zend 2-向自定义表单添加验证程序和过滤器,php,validation,zend-framework2,zend-form-element,zend-form2,Php,Validation,Zend Framework2,Zend Form Element,Zend Form2,我快发疯了。我创建了一个包含两个字段的简单表单。一个是文本字段,另一个是文本区域。表单看起来很棒,但不管我怎么尝试,我都不会验证 这是我的表格课: class MyForm extends Form { public function __construct() { parent::__construct(); $this->add(array( 'name' => 'subject', 'required' => true
class MyForm extends Form
{
public function __construct()
{
parent::__construct();
$this->add(array(
'name' => 'subject',
'required' => true,
'allowEmpty' => false,
'options' => array(
'label' => 'Betreff*',
),
'type' => 'Zend\Form\Element\Text',
'validators' => array(
// validators for field "name"
new \Zend\Validator\NotEmpty(),
),
'filters' => array(
// filters for field "name"
array('name' => 'Zend\Filter\StringTrim'),
),
));
$this->add(array(
'name' => 'text',
'required' => true,
'allowEmpty' => false,
'options' => array(
'label' => 'Nachricht*',
),
'type' => 'Zend\Form\Element\Textarea',
));
$this->add(new Element\Csrf('security'));
}
}
valdiator
和filters
只是我尝试过的许多东西之一
在我的控制器中,表单始终有效:
$form = new MyForm();
$request = $this->getRequest();
if ($request->isPost()) {
$form = new MyForm();
$form->setData($request->getPost());
echo $form->isValid();
if($form->isValid()) { ... }
如果,我总是通过
我想知道:当我设置required=true
时,为什么还需要验证器?为什么他们在没有做任何事情的情况下实现这样一个属性
但是:我如何验证我的表单?我只需要像trim
这样的cleup过滤器和NotEmpty
验证器
谢谢 在字段上添加required=>true仅用于修饰目的
你说的是哪一个“如果”?我只看到你回音了是不是有效
(很抱歉在这里提问,我还不能评论旅游问题,低代表…)
编辑:
正如承诺的那样,这是一个“解决方案”。在你说你自己找到了解决方案之后,我开始写这篇文章,所以我将写下我如何创建表单,并将表单和验证器放在一起。为了清晰起见,我喜欢将验证器放在我的表单旁边,尽管从技术上讲,将验证器放在它们所针对的实体中会给您带来更大的灵活性,比如说,和API
说得够多了,这里有一个(非常基本的)字段集示例,我在表单中使用它:
(我省略了评论,因为所有这些都应该是不言自明的)
在这里就可以了,包括实体、验证器、字段(没有过滤器,但这很简单)和验证器
要在表单中使用它(简化):
你能发布一些代码让我的验证工作吗?我真的不在乎其余的:)谢谢!如果你这样做了,我向你保证,下次你有足够的代表;)我发现我的一个老问题和一个很大的班级有联系。。。但是如果可能的话,我只想在我现有的代码中添加几行代码:我终于得到了它!我希望你仍然发布一个很好的解决方案-我会接受它:)而且,我很好奇你编造了什么!:-)基本上就是我链接中的东西。。。但我想你的解决方案更好。顺便说一句:祝贺你的新特权:)
class RaceUserFieldset extends Fieldset implements InputFilterProviderInterface {
public function __construct() {
parent::__construct('hosts');
$this ->setHydrator(new \Zend\Stdlib\Hydrator\ClassMethods(false))
->setObject(new RaceUser());
$this->add(array(
'name' => 'userid',
'type' => 'hidden',
));
$this->add(array(
'name' => 'username',
'type' => 'Text',
));
}
public function getInputFilterSpecification() {
return array(
'username' => array(
'required' => true,
),
);
}
}
class RaceUserForm extends Form
{
public function __construct()
{
parent::__construct('raceuser');
$this->setAttribute('method', 'post');
$this->add(array(
'type' => 'YCRFront\Form\EditRaceFieldset',
'options' => array(
'use_as_base_fieldset' => true
)
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Send'
)
));
}
}