2014-04-19 10 views
0

새로운 시스템에 대한 사용자 지정 구성을 시도하고 있습니다.폼 유효성 검사가 올바르게되지 않음 젠드 프레임 워크 2

필터를 사용하여 양식 유효성 검사가 중단되었습니다.

차 질문 :

$form  = new CrudForm($this->getEntityManager()); 

    $request = $this->getRequest(); 

    if ($request->isPost()) { 

     $filter = new CrudFilter(); 
     $form->setInputFilter($filter); 
     $post = $request->getPost(); 
     $form->setData($post); 
     //$crudLogic->edit($crudLogic->populateEntity($post)->update()); 

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

이 양식 검증을 얻을하지 마십시오.

namespace Manager\Form; 
use Zend\Form\Form; 
use Zend\Form\Element; 
use Doctrine\ORM\EntityManager; 
class CrudForm extends Form 
{ 
    public function __construct(EntityManager $em) 
    { 
     parent::__construct('Crud'); 
     $this->setAttribute('method', 'post'); 

     $idcrud = new Element('idCrud'); 
     $idcrud->setAttributes(array(
      'name' => 'idCrud', 
      'id' => 'idCrud', 
      'type' => 'text', 
     )); 
     $idcrud->setLabel('Id Crud'); 

     $this->add($idcrud); 

     $idmodule = array(
      'name' => 'idModule', 
      'type' => 'DoctrineModule\Form\Element\ObjectSelect', 
      'options' => array(
       'label' =>'Id Module', 
       'object_manager' => $em, 
       'target_class' => 'Manager\Entity\Module', 
       'property' => 'name', 
       'empty_option' => 'Choose', 
      ), 
     ); 
     $this->add($idmodule); 

     $name = new Element('name'); 
     $name->setAttributes(array(
      'name' => 'name', 
      'id' => 'name', 
      'type' => 'text', 
     )); 
     $name->setLabel('Name'); 

     $this->add($name); 

     $createddate = new Element\Date('createdDate'); 
     $createddate->setAttributes(array(
      'name' => 'createdDate', 
      'id' => 'createdDate', 
      'type' => 'date', 
      'size' => '30', 
      'class' => 'datepicker', 
     )); 
     $createddate->setLabel('Created Date'); 

     $this->add($createddate); 

     $updateddate = new Element\Date('updatedDate'); 
     $updateddate->setAttributes(array(
      'name' => 'updatedDate', 
      'id' => 'updatedDate', 
      'type' => 'date', 
      'size' => '30', 
      'class' => 'datepicker', 
     )); 
     $updateddate->setLabel('Updated Date'); 

     $this->add($updateddate); 

     $send = new Element('submit'); 
     $send->setValue('Submit'); 
     $send->setAttributes(array(
      'type' => 'submit' 
     )); 
     $this->add($send); 
    } 
} 

필터 :

namespace Manager\Filter; 
use Zend\InputFilter\InputFilter; 
use Zend\InputFilter\InputFilterAwareInterface; 
use Zend\InputFilter\InputFilterInterface; 

class CrudFilter extends InputFilter 
{ 
    public function __construct() 
    { 

     $this->add(array(
      'name' => 'IdCrud' 
      ,'filters' => array(
       array('name' => 'Int'), 
      ) 
     )); 
     $this->add(array(
      'name' => 'IdModule' 
      ,'required' => true 
      ,'filters' => array(
       array('name' => 'Int'), 
      ) 
     )); 
     $this->add(array(
      'name' => 'Name' 
      ,'required' => true 
      ,'filters' => array(
       array('name' => 'StripTags'), 
       array('name' => 'StringTrim'), 
      ), 
      'validators' => array(
       array(
        'name' => 'StringLength', 
        'options' => array(
        'encoding' => 'UTF-8', 
        'min'  => 1, 
        'max'  =>150, 
       ), 
      ), 
     ) 
    )); 

} 

} 나에게

놀람에서 전부하는 오류 나는 $ 양식을 수행 한 후 그러나 나를 미치게 만드는 것은이 양식은 간단하다는 것이다 -> isValid()가 그것 같이 반환 :

array (size=2) 
    'createdDate' => 
    array (size=1) 
     'isEmpty' => string 'Value is required and can't be empty' (length=36) 
    'updatedDate' => 
    array (size=1) 
     'isEmpty' => string 'Value is required and can't be empty' (length=36) 

그래서 문제가, 내가 심지어 필드에 검증을 선언하지 않는, 나타나서 t는 idModule과 이름 입력을 위해, 나는 시간을 잃어 버렸습니다. 심지어 선언하지 않는다고 생각합니다!

어디에서 확인할 수 있습니까?

편집 : 나는 심지어보기에 createdDate 및 updatedDate를 반향하지 그건 그렇고, 단지 데이터베이스 제어를 위해, 내가 양식 범위에서 검증 될 해당 필드 필요가 없습니다.

Edit2가 : 양식에서 createDate 및 updateDate을 제거함으로써, 내가 제로 메시지하는 오류를 얻을 수 있지만, 심지어 양식을 검증 할 수 없습니다! 유효한 양식이 필요합니다.

+0

이러한 질문에 삽입되는 첫 번째 오류는 양식 요소 였고 필터 요소는 동일한 식별자를 사용하지 않았습니다.Filter i에있는 IdCrud와 Form idCrud를 볼 수 있습니다. 하지만 그것은 첫 번째 오류입니다, 나는 왜 왜 createdDate에서 유효성 검사를하는지 알지 못합니다. 하지만 그건 그렇고 난 그 createdDate 및 updatedDate 양식에서 제거하고 그냥 모델에 그 값을 설정할 수있었습니다. 계속할 수있는 과로와 함께 해결되지 않은 질문이었습니다. 긴 시간으로 죄송 –

답변

0

먼저 - 데이터베이스 테이블 구조가 NOT NULL로 해당 필드 (createdDate 및 updatedDate)가 없는지 확인 마십시오.

두 번째 - InputFilter는 더 엄격한 동작을합니다. 요소를 필요로하거나 원하지 않으면 명시 적으로 지정해야합니다.

'required' => false,

$this->add(array(
    'name' => 'createdDate', 
    'required' => false, 
    .... 
)); 

$this->add(array(
    'name' => 'updatedDate', 
    'required' => false, 
    .... 
)); 

적어도 이러한 방식으로, 그 메시지 못해 오류 첨가 될() 배열로 'createdDate'및 'updatedDate'에 대한 필터 설정을보십시오.

+0

이 답변에 동의하지만, 그런데 당신이 내 인생을 도와주는 '필요'=> 허위, 나는 감사합니다. –

-1

나는 그것이 선택 사항이 될 수없는 것과 같은 문제가 있습니다. 제가 설정을 시도했습니다

은 => 등, 허위하지만 아무 소용에 '필요'.

이것은 나에게 버그처럼 보입니다.

DDL 허용 널 (null)이있는 테이블

, 나는 오프 필요한 설정하여 널 (null) 값을 허용하려고 노력하지만,이 옵션은 무시됩니다. 당신이 DoctrineModule \ 양식 \ 요소 \ ObjectSelect를 확장하고 인정하는 널 valuses을 강제로 같은

보인다.

ObjectSelect는 실제 응용 프로그램에서 사용하기에 덜 매력적입니다.