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');您将所有的验证放在实体中,您只需提到上面的代码即可验证哪个实体。