2012-03-23 43 views
0

的我新出生的Zend的概念。正在通過zend形式的文檔,並不能理解一件事情。有一個與oracle的zend項目,所以我的生活已經搞砸了;-)。我陷入了Zend_Form類的一些基本問題。問題是:當我們設置一個表單並將其重新發布到該動作時,顯然會創建新的表單對象,並且我的發佈值將像煙霧一樣消失。所以如何讓他們活着。我得到了$this->getrequest()->getparams()的替代品,但是在zend文檔中,我曾經見過的例子他們都有相同的流程。他們沒有使用getparams()作爲選項。讓我通過代碼來獲得非常清晰的想法。Zend的形式工作不正常,無法理解文檔

public function indexAction() 
    { 
     $this->view->title = 'Welcome to CashTray ';  // passing title to view 
     // creating cashtray mapper object 
     $cashTrayMapper = new Application_Model_CashtrayMapper(); 

     // search form object 
/* It will reset the object, a obvious thing*/ 
      $searchForm = new Application_Form_Cashtray_Search();      // creating search form object 

     if ($this->getRequest()->isPost())           // post request found 
     { 
      var_dump($searchForm->getValues(), $this->getRequest()->getparams());die;     
     } 
     else 
     { 

      $this->view->form = $searchForm; 
      // retrieving cashtray list 
      $this->view->entries = $cashTrayMapper->fetchAll();        // passing form to view 
     } 


    } 

OUTPUT:

array(2) { ["client"]=> string(0) "" ["offset"]=> string(0) "" } 

array(6) { ["controller"]=> string(8) "cashtray" ["action"]=> string(5) "index" ["module"]=> string(7) "default" ["client"]=> string(4) "1001" ["offset"]=> string(3) "214" ["submit"]=> string(6) "Search" } 

現在我們可以看到,形式張貼,值是有,但爲什麼我不能通過$searchForm->getValues();得到它在示例中他們有$form代替$searchForm我不要不認爲應該是問題。

+0

在ZF的請求對象,因爲你已經注意到提供了不同的方式來存取權限值。 ' - > getParams()'從setParam()','$ _GET'和'$ _POST'這個順序提取值。 ' - > getPost()'只需從'$ _GET'中的'$ _POST'和'getQuery()'中取出。這些值都沒有被過濾。過濾並驗證形式的數據與'$形式 - >的GetValues訪問()'或'$形式 - >的getValue( 'name_0f_value');''調用後 - >的isValid($數據)'。 – RockyFord 2012-03-23 14:08:38

+0

感謝rocky.I以答覆的方式實現了它,但我可能知道爲什麼會這樣嗎?因爲當我在isValid()之上訪問它時,它給出了空值結果,當我在/內部的isValid()之後訪問它時,它顯示所有值都是正確的。 – 2012-03-23 16:38:19

+1

,因爲直到你調用' - > isValid'來抵抗表單對象,'getValues()'數組是空的。只有通過調用' - > isValid'來應用驗證和過濾之後,它纔會被填充。原始值總是可以通過調用'$ this-> getRequest() - > getPost();'然而這些值未經過驗證並且未經過濾。 – RockyFord 2012-03-24 06:25:36

回答

1

典型的工作流程將更多的東西是這樣的:

public function indexAction() 
{ 
    $this->view->title = 'Welcome to CashTray ';  // passing title to view 
    // creating cashtray mapper object 
    $cashTrayMapper = new Application_Model_CashtrayMapper(); 

    // search form object 
    $searchForm = new Application_Form_Cashtray_Search();      // creating search form object 

    if ($this->getRequest()->isPost()) { 
     if ($searchForm->isValid($this->getRequest()->getPost()) { 
      // do stuff and then redirect 
     } 
    } 

    $this->view->form = $searchForm; 

    // retrieving cashtray list 
    $this->view->entries = $cashTrayMapper->fetchAll(); 
} 

如果表單驗證失敗的方法,該數據仍然在表單對象,並與相關錯誤一起重新顯示。

0

你完全可以裝載(和驗證)在Zend_Form中的值與$ searchForm->的isValid($這個 - > Request()方法 - >的getPost())。

0

正如其他人指出,要求$form->isValid($this->getRequest()->getPost())填充用POST數據的形式,也與濾波器濾波值,並添加錯誤,如果驗證規則沒有得到滿足。

我想添加的是,您還可以通過調用$form->populate($data)來設置表格值,其中$data是一個名稱與您的輸入名稱相匹配的數組。如果您有用於編輯現有實體的表單並且您想要預先填充它們,這非常方便。與isValid()不同,這不會對驗證器執行任何檢查。

+0

感謝您的支持,因爲它太過我遇到的問題..但YESTERDAY .. :) – 2012-03-23 13:38:44