我尝试从我的控制器添加验证,如下所示。但它总是显示这个
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');
}
}
}
我的控制器应该更改什么才能获得适当的解决方案。
答案 0 :(得分:0)
如果您遇到这样明确的错误,只需查看来源;)
首先要检查的是Zend\Validator\ValidatorInterface
。错误显示,实现此接口的类是例外。查看您将看到的代码,该函数需要一个Class,而不仅仅是一个字符串。
但是,由于你已经习惯了ZF,很明显你知道还有其他方法可以添加东西。那么让我们来看看Zend\InputFilter\InputFilter#add()
。您将看到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)
{
//...
}
它还接受array
,Traversable
,InputInterface
和InputFilterInterface
。所以有选择。
现在,我自己从未这样做过,我真诚地希望这有效(如果不是我很糟糕!),但假设您使用的是数组语法,那么您所要做的就是:
[...]->getValidatorChain()->add(array(
'type' => 'Zend\Validator\NotEmpty'
));
请告诉我这是否适合您;)