Zend framework 如何在zend framework中向layout.phtml添加动态生成下拉列表
我想在布局中添加一个下拉菜单。 我有一张旅馆的名单。我想从下拉列表中更改酒店,我需要将该下拉列表保留在layout.phtml中。 问题是酒店列表是动态的。 我能这样做吗,在zend这可能吗 这是我的布局,phtml 我需要在Zend framework 如何在zend framework中向layout.phtml添加动态生成下拉列表,zend-framework,Zend Framework,我想在布局中添加一个下拉菜单。 我有一张旅馆的名单。我想从下拉列表中更改酒店,我需要将该下拉列表保留在layout.phtml中。 问题是酒店列表是动态的。 我能这样做吗,在zend这可能吗 这是我的布局,phtml 我需要在 否。布局文件表示页面的静态结构,如页眉和页脚以及围绕动态内容的所有内容 所以这是不推荐的。但是,您可以解决实现主控制器的\u init方法并使用该主控制器扩展任何控制器的问题: class MainController extends Zend_Action_Contro
否。布局文件表示页面的静态结构,如页眉和页脚以及围绕动态内容的所有内容 所以这是不推荐的。但是,您可以解决实现主控制器的
\u init
方法并使用该主控制器扩展任何控制器的问题:
class MainController extends Zend_Action_Controller{
function init(){
$this->view->foo = "Show everywhere!";
}
}
class IndexController extends MainController{
public function indexAction(){
$this->view->bar = "Show only on index/index";
}
}
或者你可以使用一个插件,这将是更优雅的方式
class MyPlugin extends Zend_Controller_Plugin_Abstract{
public function preDispatch(Zend_Controller_Request_Abstract $request){
$view = Zend_Controller_Action_HelperBroker::
getStaticHelper('viewRenderer')->view;
$view->foo = "bar";
}
}
在你的引导过程中注册这个插件
Zend_Controller_Front::getInstance()->registerPlugin(new MyPlugin);
不可以。布局文件表示页面的静态结构,如页眉和页脚以及围绕动态内容的所有内容 所以这是不推荐的。但是,您可以解决实现主控制器的
\u init
方法并使用该主控制器扩展任何控制器的问题:
class MainController extends Zend_Action_Controller{
function init(){
$this->view->foo = "Show everywhere!";
}
}
class IndexController extends MainController{
public function indexAction(){
$this->view->bar = "Show only on index/index";
}
}
或者你可以使用一个插件,这将是更优雅的方式
class MyPlugin extends Zend_Controller_Plugin_Abstract{
public function preDispatch(Zend_Controller_Request_Abstract $request){
$view = Zend_Controller_Action_HelperBroker::
getStaticHelper('viewRenderer')->view;
$view->foo = "bar";
}
}
在你的引导过程中注册这个插件
Zend_Controller_Front::getInstance()->registerPlugin(new MyPlugin);
您可以在基本控制器类中创建preDispatch函数。 然后,您将获得酒店列表并将其发送至查看:
$this->view->hotels = $hotels;
在布局中,您可以根据需要对其进行解析。您可以在基本控制器类中创建preDispatch函数。 然后,您将获得酒店列表并将其发送至查看:
$this->view->hotels = $hotels;
在您的布局中,您可以根据需要解析它。我在这里看到两个问题:
My_form_Hotels
扩展Zend_form
,它接受酒店列表作为构造函数参数postDispatch()
中运行较晚,因此您需要在此之前运行自己的插件<代码>dispatchLoopStartup()应该可以
在library/My/Plugin/HotelForm.php
中类似的内容:
class My_Plugin_HotelForm extends Zend_Controller_Plugin_Abstract
{
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
$hotelModel = new My_Model_Hotel();
$hotels = $hotelModel->getAllHotels();
$form = new My_Form_Hotels($hotels);
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$view = $viewRenderer->getView();
$view->hotelForm = $form;
}
}
然后在布局中,只需使用$this->hotelForm
转储表单即可
要启用插件,请添加到应用程序/configs/application.ini
:
autoloaderNamespaces[] = 'My_"
resources.frontcontroller.plugins[] = "My_Plugin_HotelForm"
我在这里看到两个问题:
My_form_Hotels
扩展Zend_form
,它接受酒店列表作为构造函数参数postDispatch()
中运行较晚,因此您需要在此之前运行自己的插件<代码>dispatchLoopStartup()应该可以
在library/My/Plugin/HotelForm.php
中类似的内容:
class My_Plugin_HotelForm extends Zend_Controller_Plugin_Abstract
{
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
$hotelModel = new My_Model_Hotel();
$hotels = $hotelModel->getAllHotels();
$form = new My_Form_Hotels($hotels);
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$view = $viewRenderer->getView();
$view->hotelForm = $form;
}
}
然后在布局中,只需使用$this->hotelForm
转储表单即可
要启用插件,请添加到应用程序/configs/application.ini
:
autoloaderNamespaces[] = 'My_"
resources.frontcontroller.plugins[] = "My_Plugin_HotelForm"
事实上,情况是表单应该出现在我的所有页面中,事实上,情况是表单应该出现在我的所有页面中,您也可以将创建下拉列表的逻辑设置为部分(用于干净的布局)为什么要发布我的答案的副本?我认为引导是这个函数的错误位置,但我可能是错误的;)您还可以将创建下拉列表的逻辑设置为部分(用于干净的布局)为什么要发布我的答案的副本?我认为引导是这个函数的错误位置,但我可能错了;)嗯。。。。。。。试图理解这一点。我能做到这一点。谢谢你们的帮助,伙计们:D:)嗯。。。。。。。试图理解这一点。我能做到这一点。谢谢你们的帮助,伙计们:D:)