2017-02-20 15 views
0

zend framework 2でシンプルなフォームを数日間検証しようとしました。 このトピックを考慮してドキュメントと多くの投稿を確認しましたが、解決策は見つかりませんでした。ZF2単純フォームの検証

私は非常に単純な形式があります。それは

public function alimentAction(){ 
    $form = new AlimentForm(); 

    $form->setInputFilter(new AlimentInputFilter()); 

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

     if ($form->isValid()) { 
      $year = $form->get('year')->getValue(); 
      $number = $form->get('number')->getValue(); 

      return array('result' => array(
       "msg" => "In the Year ".$year." you get ".$number." Points" 
      )); 
     } 
    } 
    return array('form' => $form); 
} 

namespace Application\Form; 

use Zend\InputFilter\InputFilter; 
class AlimentInputFilter extends InputFilter { 
    public function init() 
    { 
    $this->add([ 
     'name'  => AlimentForm::year, 
     'required' => true, 
     'validators' => array(
      array(
       'name' => 'Between', 
       'options' => array(
        'min' => 1900, 
        'max' => 3000, 
      ), 
     ), 
     ), 
    ]); 
} 
} 

、最終的に私のコントローラで、私は、フォームを検証しよう:私はカスタムInputFilterを作成

class AlimentForm extends Form 
{ 
public function __construct($name = null) 
{ 
    parent::__construct('aliment'); 

    $this->add(array(
     'required'=>true, 
     'name' => 'year', 
     'type' => 'Text', 
     'options' => array(
      'label' => 'Jahr', 
     ), 
    )); 
    $this->add(array(
     'required'=>true, 
     'name' => 'number', 
     'type' => 'Text', 
     'options' => array(
      'label' => 'Number', 
     ), 
    )); 
    $this->add(array(
     'name' => 'submit', 
     'type' => 'Submit', 
     'attributes' => array(
      'value' => 'Go', 
      'id' => 'submitbutton', 
     ), 
    )); 
} 
} 

をそれは難しいことではありませんが、ネットで見つけたフォームを検証するためのさまざまな方法から、私はちょっと混乱しています...

私は何が欠けていますか?

ご挨拶とありがとうございます。 U.H.

答えて

0

私はこの問題を解決しました。

私は年数属性 を持って援軍フォームのモデルを作成し、私はそのモデル内の入力フィルタを定義した:私は設定することができたコントローラのアクションメソッドで

use Zend\InputFilter\InputFilter; 
use Zend\InputFilter\InputFilterAwareInterface; 
use Zend\InputFilter\InputFilterInterface; 

class Aliment implements InputFilterAwareInterface 
{ 
    public $year; 
    public $number; 

    public function exchangeArray($data){ 
     $this->year    = (!empty($data['year']))?$data['year']:null; 
     $this->number   = (!empty($data['number']))?$data['number']:null; 
    } 

    public function setInputFilter(InputFilterInterface $inputFilter) 
    { 
     throw new \Exception("Not used"); 
    } 

    public function getInputFilter() 
    { 
     if (!$this->inputFilter) { 
      $inputFilter = new InputFilter(); 


      $inputFilter->add(array(
       'name'  => 'year', 
       'required' => true, 
       'filters' => array(
        array('name' => 'StripTags'), 
        array('name' => 'StringTrim'), 
       ), 
       'validators' => array(
        array(
         'name' => 'Between', 
         'options' => array(
          'min' => 1900, 
          'max' => 3000 
         ) 
        ) 
       ), 
      )); 

      $inputFilter->add(array(
       'name'  => 'number', 
       'required' => true, 
       'filters' => array(
        array('name' => 'StripTags'), 
        array('name' => 'StringTrim'), 
       ), 
       'validators' => array(
        array(
         'name' => 'Between', 
         'options' => array(
          'min' => 1, 
          'max' => 10 
         ) 
        ) 
       ), 
      )); 

      $this->inputFilter = $inputFilter; 
     } 

     return $this->inputFilter; 
    } 

} 

フォームのモデルのInputFilterとvoila!出来た!

フォームは正しく検証され、対応するエラーメッセージが返されます。

私は妥当性検査と同様の問題を抱えている誰かを助けることを願っています!

関連する問題