2012-03-23 48 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