Php Zend ViewScript Decorator大局图,整体使用。如何?
的确,我看过很多关于stackoverflow的例子,还有很多来自谷歌搜索的例子,但显然没有人展示事物是如何相互影响的,即使是手册本身 我刚刚选择了Zend Framework(1.10.8),在创建表单时,我终于发现ViewScript现在对我来说更容易配置,但事实并非如此 我有一个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
模块预订
,其中包含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的方法是否正确,这对我来说要简单得多。你能看看并告诉我我做错了什么吗。我只需要做点事情就可以了。谢谢;)