【问题标题】:Zend Framework: Multiple Modules in layoutZend Framework:布局中的多个模块
【发布时间】:2013-04-04 00:15:36
【问题描述】:

如何在我的布局中使用来自不同控制器/模块的多个操作?

我试过了:

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

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

【问题讨论】:

  • 这不是一个好主意。大概您的登录操作会显示登录表单?所以你应该在你的布局中输出这个表单(可能通过一个助手)。
  • 在每个视图中我都有 ajax 代码,接下来是表单。我需要现场:新闻、登录/聊天、最后的 cmets、Messagess。我没有其他想法..

标签: php zend-framework layout module controllers


【解决方案1】:

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

例如,要在应用程序的任何或所有页面中呈现登录表单,我们首先在布局或视图脚本中为表单添加一个 placholder: p>

<!--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();
    }

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

使用带占位符的助手通常是完成您想要的事情的首选方式。但是,如果您绝对必须在其他视图中显示操作,您可以使用 Action view helper,但请注意性能可能会受到影响。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我需要在布局中渲染动作 - 控制器 - 模块。当我尝试该代码时,我有:致命错误:找不到类'User_LoginController'。而且我不知道如何从不同模块中的不同控制器获取视图/动作。对不起我的英语。
    • 这可能会有所帮助......对于渲染我们经常使用这样的锚标签......
    • 我在一个站点上需要 4 个模块。新闻、登录/聊天等。没有链接。
    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多