Zend framework2 Zend Framework 2设置Zend\InputFilter setRequired()
我有一个带有InputFilter的Form\元素,其“required”值设置为“false”。在某些情况下,该元素需要在控制器内将“必需”值设置为“真” 当我在控制器中设置Zend\InputFilter setRequired(true)时,调用$form->isValid()方法时,似乎并不遵守该设置。但是,如果在Zend\InputFilter中的“required”为“true”的位置设置了筛选器(而不是在控制器中动态设置),则它会按预期工作-但这不是我想要的解决方案,因为我在多个位置使用此表单和筛选器,有时字段是必需的,有时不是 在我的控制器中,我有以下功能:Zend framework2 Zend Framework 2设置Zend\InputFilter setRequired(),zend-framework2,Zend Framework2,我有一个带有InputFilter的Form\元素,其“required”值设置为“false”。在某些情况下,该元素需要在控制器内将“必需”值设置为“真” 当我在控制器中设置Zend\InputFilter setRequired(true)时,调用$form->isValid()方法时,似乎并不遵守该设置。但是,如果在Zend\InputFilter中的“required”为“true”的位置设置了筛选器(而不是在控制器中动态设置),则它会按预期工作-但这不是我想要的解决方案,因为我在多个位
$form = new UserDataForm();
$request = $this->getRequest();
if ($request->isPost()) {
$update = new UserFilter();
// The following doesn't seem to be respected
$update->getInputFilter()->get('userName')->setRequired(true);
$form->setInputFilter($update->getInputFilter());
$form->setData($request->getPost());
if($form->isValid()) {
//The result is true even when the 'userName' var is not set in the POST data.
echo("Is Valid");
} else {
echo($form->getMessages());
}
我将UserDataForm()类设置为:
class UserDataForm extends Form
{
public function __construct($name = null, array $userTypes) {
parent::__construct('user');
$this->setAttribute('method','post');
$this->add(array(
'name' => 'userName',
'attributes' => array(
'type' => 'text',
'class'=> 'small'
),
'options' => array(
'label' => 'Username:'
)
));
//... and so on...
public function getInputFilter() {
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'userName',
'required' => false,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
)
),
)
)));
// ...
我将UserFilter类设置为:
class UserDataForm extends Form
{
public function __construct($name = null, array $userTypes) {
parent::__construct('user');
$this->setAttribute('method','post');
$this->add(array(
'name' => 'userName',
'attributes' => array(
'type' => 'text',
'class'=> 'small'
),
'options' => array(
'label' => 'Username:'
)
));
//... and so on...
public function getInputFilter() {
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'userName',
'required' => false,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
)
),
)
)));
// ...
有人能解释一下为什么在验证表单时,从我的控制器调用的$update->getInputFilter()->get('userName')->setRequired(true)似乎没有得到尊重吗?我在对它进行了一段时间的研究后发现了这个问题。 显然,->setRequired(true)在动态分配时是互斥的。如果您正在寻找与\FilterInput中设置'required'=>true相同的行为,那么还需要添加->setAllowEmpty(false) 因此,我修改后的代码如下所示:
$update->getInputFilter()->get('userName')->setRequired(true);
$update->getInputFilter()->get('userName')->setAllowEmpty(false);
Derrick我在上面休息了一段时间后发现了问题。 显然,->setRequired(true)在动态分配时是互斥的。如果您正在寻找与\FilterInput中设置'required'=>true相同的行为,那么还需要添加->setAllowEmpty(false) 因此,我修改后的代码如下所示:
$update->getInputFilter()->get('userName')->setRequired(true);
$update->getInputFilter()->get('userName')->setAllowEmpty(false);
井架