Zend Framework:布局中的多个模块

时间:2013-04-11 17:15:33

标签: php zend-framework layout module controllers

如何在布局中从不同的控制器/模块中执行多个操作?

我试过了:

<div id="login"><?php $x=new User_LoginController; $x->LoginAction() ?>

<div id="news"><?php $x=new Site_NewsController; $x->ShowAction() ?>

2 个答案:

答案 0 :(得分:0)

我没有得到你想要的东西?

我猜到的可能是你想从布局中调用这个函数(动作)以显示什么是

从那里回到布局......

答案 1 :(得分:0)

您需要实施view helpers,特别是placeholder()视图助手。

例如,要在应用程序的任何或所有页面中呈现登录表单,我们首先在布局或视图脚本中使用 placholder

<!--layout.phtml-->
<div>
    <?php echo $this->layout()->login . "\n"?>
</div>

我使用action helper准备要显示的表单:

<?php

/**
 * Prepares login form for display
 */
class My_Controller_Action_Helper_Login extends Zend_Controller_Action_Helper_Abstract
{

    /**
     * @return \Application_Form_Login
     */
    public function direct()
    {
        $form = new Application_Form_Login();
        //this is the url of the action this form will default too
        $form->setAction('/index/login');

        return $form;
    }
}

现在可以从任何控制器或前端控制器插件设置占位符:

public function preDispatch()
    {
        $this->_helper->layout()->login = $this->_helper->login();
    }

现在登录表单将显示在来自此控制器的任何操作中,该操作使用layout.phtml作为其布局。我会让你自己发现插件。

使用带占位符的帮助程序通常是实现所需内容的首选方式。但是,如果您绝对必须在其他视图中显示操作,则可以使用Action view helper,请注意性能可能会受到影响。

<div id="login">
     <?php echo $this->action('login', 'login', 'user'); ?>
</div>