Zend framework2 如何在zend framework 2中添加来自控制器的表单验证
我尝试从我的控制器添加验证,如下所示。但它总是显示出这一点Zend framework2 如何在zend framework 2中添加来自控制器的表单验证,zend-framework2,zend-validate,Zend Framework2,Zend Validate,我尝试从我的控制器添加验证,如下所示。但它总是显示出这一点 if ($request->getPost('ownerType') == "Company") { $form->getInputFilter()->get('companyName')->getValidatorChain()->addValidator('required'); } 显示错误。我混淆了下面的错误 Catchable fatal error: Argumen
if ($request->getPost('ownerType') == "Company") {
$form->getInputFilter()->get('companyName')->getValidatorChain()->addValidator('required');
}
显示错误。我混淆了下面的错误
Catchable fatal error: Argument 1 passed to Zend\Validator\ValidatorChain::addValidator() must implement interface Zend\Validator\ValidatorInterface, string given, called in E:\xampp\htdocs\hossbrag\module\WebApp\src\WebApp\Controller\JobController.php on line 177 and defined in E:\xampp\htdocs\hossbrag\vendor\zendframework\zendframework\library\Zend\Validator\ValidatorChain.php on line 100
我的控制器在这里
<?php
namespace WebApp\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use WebApp\Entity\User;
use Zend\View\Model\JsonModel;
use vendor\mpdf\mpdf;
class JobController extends AuthenticatedController
{
public function createAction()
{
$form = new \WebApp\Form\JobpostingForm();
$form->get('companyName')->setValueOptions($company);
$checkAgreement = true;
$request = $this->getRequest();
if ($request->getPost('ownerType') == "Company") {
$form->getInputFilter()->get('companyName')->getValidatorChain()->addValidator('required');
}
}
}
如果遇到如此明显的错误,只需查看源代码;)
首先要检查的是。该错误向您显示,实现此接口的类除外。查看您将看到的代码,函数需要一个类,而不仅仅是一个字符串
但是,由于您对ZF有一点习惯,很明显您知道还有其他添加内容的方法。让我们来看一看。您将看到,add()
函数的第一个参数确实要求一个类实现ValidatorInterface
。但它也接受一些其他东西:
/**
* Add an input to the input filter
*
* @param array|Traversable|InputInterface|InputFilterInterface $input
* @param null|string $name
* @return InputFilter
*/
public function add($input, $name = null)
{
//...
}
它还接受数组
,可遍历
,输入接口
和输入过滤接口
。因此,选择是存在的
现在,我自己从来没有这样做过,我真诚地希望这能奏效(如果不是我的话!),但是假设您使用的是数组语法,那么您所要做的就是:
[...]->getValidatorChain()->add(array(
'type' => 'Zend\Validator\NotEmpty'
));
让我知道这是否对您有效;) 我可以从这里找到解决办法。这一行是我的解决方案$form->setValidationGroup('name','email','subject','message');您将所有的验证放在实体中,您只需提到上面的代码即可验证哪个实体。