2013-04-24 3 views
0

아래와 같이 컨트롤러에서 유효성 검사를 추가하려고했습니다. 하지만 항상 이것을 보여줍니다.젠드 프레임 워크 2의 컨트롤러에서 폼 유효성 검사를 추가하는 방법

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

입니다.) Zend\Validator\ValidatorInterface 될 것이라고 확인

먼저 하나를, 당신은 명확한 오류가 발생하면

+1

여기에서 해결책을 찾을 수 있습니다 .. http://stackoverflow.com/questions/15782107/zend-framework-2-removed-form-element-causes -validation-to-fail. 이 줄은 내 솔루션 $ form-> setValidationGroup ('name', 'email', 'subject', 'message')입니다. 엔티티에 모든 유효성 검사를 넣고 유효성을 검사 한 코드 중 위의 코드 만 언급하면됩니다. –

답변

0

, 단순히 소스를 확인하십시오. 오류는이 인터페이스를 구현하는 클래스가 예외임을 보여줍니다. 보이는 코드를 보면 함수는 문자열이 아니라 클래스를 원합니다.

하지만 ZF에 조금 익숙해 진 이후로 물건을 추가하는 다른 방법이 있다는 것을 알게되었습니다. 이제 Zend\InputFilter\InputFilter#add()을 살펴 보겠습니다. add() 함수의 첫 번째 매개 변수가 실제로 ValidatorInterface을 구현하는 클래스를 묻는 것을 볼 수 있습니다. 또한 array, Traversable, InputInterfaceInputFilterInterface 받아

/** 
* 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' 
)); 
: 당신이해야 할 모든이있다,

지금, 나는이에게 자신을 해본 적이 그리고 난 진심이 작품 희망하지만, 배열 구문을 사용하는 가정 (내가 빨아하지 않을 경우!)

내가 이것을 해결했는지 알려주세요)

관련 문제