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)
{
    //...
}

arrayTraversableInputInterfaceも受け入れますInputFilterInterface。したがって、選択肢はあります。

今、私はこれを自分でやったことがなく、これが機能することを心から願っています (そうでなければ!) が、配列構文を使用していると仮定すると、あなたがしなければならないことはこれだけです:

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

これがうまくいったかどうか教えてください;)

于 2013-04-24T06:30:32.660 に答える