2014-08-27 127 views
0

我剛從zf1移動到zf2,一些簡單的任務給我頭痛。 我的窗體上有一些過濾器。過濾器正在形式isValid函數上運行,並且此函數運行後,我希望過濾的數據重新綁定到表單。zf2窗體綁定isValid

我的使用Zend Framework 2.2.7

這是我的控制器代碼:

<?php 

namespace Test\Controller; 

use Test\Entity\Product; 
use Test\Form\CreateProduct; 
use Zend\Mvc\Controller\AbstractActionController; 

class TestController extends AbstractActionController 
{ 

    public function indexAction() 
    { 
     $form = new CreateProduct(); 
     $product = new Product(); 
     $form->bind($product); 

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

      if ($form->isValid()) { 
       var_dump($product); 
      } 
      $form->bind($product); // manual rebind seems to work but look hackish 

     } 

     return array(
      'form' => $form, 
     ); 
    } 
} 
+0

我知道您即使在數據無效時也需要應用過濾器。但無論如何,當你再次提交時,它將通過'isValid()'方法調用並應用過濾器。所以最後,你會得到過濾數據。 – 2014-08-27 13:09:08

+0

是的,我的模型已經過濾了數據,但是窗體上的值仍然是發佈時沒有應用過濾器的數據。 – 2014-08-27 13:15:02

回答

1

,如果你想「重新綁定」將數據傳回的形式(在驗證失敗後)使用$form->populateValues()

$request = $this->getRequest(); 
if($request->isPost()) 
{ 
    if($form->isValid()) 
    { 
     $validatedFormData = $form->getData(); 
     // do something 

    } else { 

     // populate posted values to form 
     $form->populateValues($request->getPost()); 

     // fetch form errors $form->getMessages() 
     // whatever 
    } 
}