1

여기 바나나가 있습니다. 두 개의 필드가 포함 된 간단한 양식을 만들었습니다. 하나는 텍스트 필드이고, 다른 하나는 텍스트 영역입니다. 양식은 좋아 보이지만 내가 무엇을 시도하든 상관없이 나는 검증하지 않을 것입니다. 양식은 항상 유효Zend 2 - 유효성 검사기 및 필터를 사용자 정의 폼에 추가하십시오.

class MyForm extends Form 
{ 

public function __construct() 
{ 

    parent::__construct(); 

    $this->add(array(
     'name' => 'subject', 
     'required' => true, 
     'allowEmpty' => false, 
     'options' => array(
      'label' => 'Betreff*', 
     ), 
     'type' => 'Zend\Form\Element\Text', 
     'validators' => array(
      // validators for field "name" 
      new \Zend\Validator\NotEmpty(), 
     ), 
     'filters' => array(
      // filters for field "name" 
      array('name' => 'Zend\Filter\StringTrim'), 
     ), 
    )); 

    $this->add(array(
     'name' => 'text', 
     'required' => true, 
     'allowEmpty' => false, 
     'options' => array(
      'label' => 'Nachricht*', 
     ), 
     'type' => 'Zend\Form\Element\Textarea', 
    )); 

    $this->add(new Element\Csrf('security')); 
} 
} 

valdiatorsfilters 내가 노력 많은 것들 중 하나입니다 ... 여기 내 컨트롤러에서

: 여기

은 내 양식 클래스입니다

$form = new MyForm(); 

    $request = $this->getRequest(); 
    if ($request->isPost()) { 

     $form = new MyForm(); 
     $form->setData($request->getPost()); 

     echo $form->isValid(); 

     if($form->isValid()) { ... } 

나는 항상 if을 전달합니다.

나는 왜 required=true을 설정할 때 검사기가 필요합니까? 아무 것도하지 않을 때 왜 그런 속성을 구현합니까?

하지만 여전히 : 양식을 확인하려면 어떻게해야합니까? 방금 trimNotEmpty 검사기와 같은 clenup 필터가 필요합니다.

감사합니다.

답변

2

필드에 required => true를 추가하는 것은 단지 미용 용도로 사용됩니다.

"무엇"에 대해 이야기하고 있습니까? 나는 당신이 isValid를 반향하는 것을 본다.

(여기 질문에 대한 미안, 난 ... 아직 낮은 담당자 투어 질문을 언급하지 못할)

편집 :하는 "솔루션"약속대로

. 나는 스스로 해결책을 찾았다 고 말한 후에이 글을 쓰기 시작했다. 그래서 나는 폼을 만들고 폼과 유효성 검사기를 함께 유지하는 방법을 적어 놓을 것이다. 유효성 검사기를 기술적 인 측면에서 볼 때 엔티티에 배치하는 것이 유효하지만, 말하자면 API와 관련하여 더 많은 유연성을 제공 할 수 있습니다. 충분한 말했다

, 여기에 내가 양식에 사용 A (아주 기본) FIELDSET의 예 :

가 (해야 내가 모두 같은 의견을 남겨 매우 자명)

class RaceUserFieldset extends Fieldset implements InputFilterProviderInterface { 

    public function __construct() { 
     parent::__construct('hosts'); 

     $this ->setHydrator(new \Zend\Stdlib\Hydrator\ClassMethods(false)) 
       ->setObject(new RaceUser()); 

     $this->add(array(
      'name' => 'userid', 
      'type' => 'hidden', 
     )); 
     $this->add(array(
      'name' => 'username', 
      'type' => 'Text', 
     )); 
    } 

    public function getInputFilterSpecification() { 
     return array(
      'username' => array(
       'required' => true, 
      ), 
     ); 
    } 
} 

여기 엔 엔티티, 하이드 레이터, 필드 (필터가 없지만 쉽습니다)와 유효성 검사기가 있습니다.

양식에서 사용하기 위해 (simplyfied) :

class RaceUserForm extends Form 
{ 
    public function __construct() 
    { 
     parent::__construct('raceuser'); 

     $this->setAttribute('method', 'post'); 

     $this->add(array(
      'type' => 'YCRFront\Form\EditRaceFieldset', 
      'options' => array(
       'use_as_base_fieldset' => true 
      ) 
     )); 

     $this->add(array(
      'name' => 'submit', 
      'attributes' => array(
       'type' => 'submit', 
       'value' => 'Send' 
      ) 
     )); 
    } 
} 
+0

당신은 내 검증 작업을 할 몇 가지 코드를 게시하시기 바랍니다 수 있습니까? 나는 나머지에 대해 정말로 신경 쓰지 않는다 :) 고마워요! 추신 : 당신이 할 경우, 다음에 충분한 담당자가 있다고 약속합니다.) – Ron

+1

몇 분 후에 코드를 작성하겠습니다. –

+1

VERY에 대한 링크가있는 이전 질문을 발견했습니다. 큰 클래스 ...하지만 가능하면 기존 코드에 몇 줄을 추가하고 싶습니다. [대답] (http://stackoverflow.com/a/14212240/1331671) – Ron

관련 문제