Php Zend ViewScript Decorator大局图,整体使用。如何?

Php Zend ViewScript Decorator大局图,整体使用。如何?,php,zend-framework,zend-form,Php,Zend Framework,Zend Form,的确,我看过很多关于stackoverflow的例子,还有很多来自谷歌搜索的例子,但显然没有人展示事物是如何相互影响的,即使是手册本身 我刚刚选择了Zend Framework(1.10.8),在创建表单时,我终于发现ViewScript现在对我来说更容易配置,但事实并非如此 我有一个模块预订,其中包含UserController和createAction。在/application/modules/booking/views/scripts/user下,我有create.phtml和custo

的确,我看过很多关于stackoverflow的例子,还有很多来自谷歌搜索的例子,但显然没有人展示事物是如何相互影响的,即使是手册本身

我刚刚选择了Zend Framework(1.10.8),在创建表单时,我终于发现ViewScript现在对我来说更容易配置,但事实并非如此

我有一个
模块预订
,其中包含
UserController
createAction
。在
/application/modules/booking/views/scripts/user
下,我有
create.phtml
customerform.phtml

据我所知,在一切结束时,我的表单及其呈现将显示在我的
create.phtml
中,因为在我的表单中,它将使用
customerForm.phtml
作为其视觉效果,并注入到create视图中

所以我继续创建了一个简单的表单

function init(){
  $this->setMethod("post");

  $name = New Zend_Form_Element_Text("name");
  $name->setLabel("Name: ")
  ->setOptions(array("size"=>"35"))
  ->setRequired(true)
  ->addValidator("NotEmpty", true);

  $surname = New Zend_Form_Element_Text("surname");
  $surname->setLabel("Surname: ")
  ->setOptions(array("size"=>"35"))
  ->setRequired(true)
  ->addValidator("Alpha", true);

  $this->addElement($name)
  ->addElement($surname)
  ->addElement($submit);
}
下面是UserController中的createAction

public function createAction(){
  $this->view->show = "Please Enter your Details";

  $form = new Hotel_Form_Entity();
  $form->setAction("/booking/user/create");
                //and here set the for to be displayed at described in customerForm view
  $form->setDecorators(array(array('ViewScript',array('viewScript'=>'customerForm.phtml'))));
                //so here i set the form to form variable accessible in create view
  $this->view->form = $form;
  if($this->getRequest()->isPost()){
    if($form->isValid($this->getRequest()->getPost())){
      $values = $form->getValues();
      $this->_helper->flashMessenger("Thank you.Form processed");

      $this->_forward("success","user","booking",$values);
    }
  }
}
现在是create.phtml和customerForm.phtml

<!-- create.phtml -->
<h4><?php echo $this->show; ?></h4><br/><!--  -->
<p><?php echo $this->form; ?></p><br/> 

 <!-- customerForm.phtml --> 
<div style="padding: 10 0 0 15; border: solid 1.5px #999">
 <form action="<?php echo $this->element->getAction(); ?>" method="<?php echo $this->element->getMethod(); ?>">
  <table>
     <tr>
       <td><?php echo $this->element->name; ?></td>
       <td></td>
     </tr>
     <tr>
       <td></td>
       <td><?php echo $this->element->surname; ?></td>
     </tr>
     <tr>
       <td colspan="2"><?php echo $this->element->submit; ?> </td>
     </tr>
   </table>
  </form> 
 </div>




您好,我想重写您的操作,让我们暂时忘记CustomPerform.phtml

public function createAction(){
  $this->view->show = "Please Enter your Details";

  $form = new Hotel_Form_Entity();
  $form->setAction("/booking/user/create");
  $form->setElementDecorators(array('viewHelper', 'formElements')));
  $this->view->form = $form;
  if($this->getRequest()->isPost()){
    if($form->isValid($this->getRequest()->getPost())){
      $values = $form->getValues();
      $this->_helper->flashMessenger("Thank you.Form processed");

      $this->_forward("success","user","booking",$values);
    }}}
formElements装饰师做什么

Zend_Form_Decorator_FormElements 窗体、显示组和子窗体 是元素的集合。整齐 为了渲染这些元素,它们使用 FormElements装饰器 遍历所有项,调用 在每个上渲染()并使用 已注册的分隔符。它可以 附加或前置内容 传给它


我希望我做得对,仅供参考,我还没有测试该操作:)

好的,我已经弄明白了。编码方面的一切都是正确的。

我只需要将customerForm.phtml放入
/modules/booking/views/scripts/
中就可以了。感谢那些试图帮助我的人。我现在可以学习如何定制标准装饰器,正如Tawfekov试图解释的那样。

学习装饰器时关于装饰器的第一个提示是使用$this->form->clearDecorators();从没有装饰器开始,看看你的表单结果如何。我已经这样做了,并且总是检查页面的来源。我只需要找一个简单的viewscript装饰器来开始个性化设置,并完全理解它。不幸的是,我没有太多时间真正玩它。不过谢谢你的提示。谢谢你的帮助努力解释我如何使用标准装饰器。我会看一下,但我现在真正需要的是了解我使用viewscript的方法是否正确,这对我来说要简单得多。你能看看并告诉我我做错了什么吗。我只需要做点事情就可以了。谢谢;)