0

我试图从我的控制器添加一个验证,如下所示。但它总是显示这个

 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');
        }
}
}

应该在我的控制器中更改什么以获得适当的解决方案。

4

1 回答 1

0

如果您遇到如此明显的错误,只需查看来源;)

第一个要检查的是Zend\Validator\ValidatorInterface. 错误向您显示,实现此接口的类除外。查看您将看到的代码,该函数需要一个类,而不仅仅是一个字符串。

但是由于您对 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)
{
    //...
}

它还接受arrayTraversable和。所以选择是有的。InputInterfaceInputFilterInterface

现在,我自己从来没有这样做过,我真诚地希望这能奏效(如果不是我糟透了!),但假设你使用的是数组语法,你所要做的就是:

[...]->getValidatorChain()->add(array(
    'type' => 'Zend\Validator\NotEmpty'
));

让我知道这是否适合您;)

于 2013-04-24T06:30:32.660 回答