1

我要去香蕉這裏。我創建了一個包含兩個字段的簡單表單。一個是文本字段,另一個是textarea。表單看起來不錯,但我不會驗證 - 無論我嘗試什麼。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時我需要驗證器?爲什麼他們在沒有做任何事情時實施這樣的屬性?

但仍然:我如何驗證我的表單?我只想要一個clenup過濾器,如trim和一個NotEmpty驗證程序。

謝謝!

回答

2

在字段上添加required => true僅用於美觀目的。

你在說什麼「如果」?我只看到你回顯isValid?

(約發問這裏對不起,我不能發表評論旅遊問題的是,低代表...)

編輯:

正如所承諾的,一個 「解決方案」。當你說你自己找到了解決方案後,我開始寫這個,所以我只會寫下我如何創建表單並將我的表單和驗證程序放在一起。爲了清楚起見,我喜歡將驗證器放在我的表單旁邊,儘管技術上將驗證器設置在它們所用的實體中會使您在API和API等方面具有更大的靈活性。

說夠了,這裏是一個(非常基本的)字段集,我在窗體中使用的例子:

(我離開的意見了所有應該非常不言自明)

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

能否請您發佈一些代碼,使我的審定工作?我真的不關心其他:)謝謝! PS:如果你這樣做,我保證,下一次你有足夠的代表;) – Ron

+1

我會在幾分鐘內爲你寫一些代碼,堅持;) –

+1

我發現了一箇舊的問題,我的鏈接到非常大班...但如果可能我只想添加幾行到我現有的代碼:[The answer](http://stackoverflow.com/a/14212240/1331671) – Ron