zend-framework2 - Zend Framework 2 从布局中获取 Controller 名称

标签 zend-framework2

我有不同 Controller 和 Action 的以下路由,它们都显示相同的布局和不同的 View ,例如:

http://<my domain>/controllername1/action1 
http://<my domain>/controllername1/ 
http://<my domain>/controllername2/action1
http://<my domain>/controllername3/action1

如何在布局代码中获取加载布局的 Controller 名称?返回的内容:“controllername1”、“controllername2”或“ Controller 名称3

目标是确定我在网站的哪个部分,并对布局进行一些自定义。

我检查了类似的回复,但针对的是旧版本的 Zend Framework。

澄清: 这个想法是从布局代码中获取 Controller 名称,而不是从 Controller 代码中传递它。也许不可能?其他答案适用于旧版本的 ZendFramework(测试版),现在可能是一种更直接的方法。

已编辑:更多信息

我可以在我的 Module.php 文件中设置以下关于 onBootstrap($e) 的代码:

public function onBootstrap($e)
{
    // (...) Other code

    $application = $e->getParam('application');
    $viewModel = $application->getMvcEvent()->getViewModel();

    // Parsing URI to get controller name
    $viewModel->controllerName = trim($_SERVER['REQUEST_URI'],'/');
    if (substr_count($viewModel->controllerName, '/')) {
        $viewModel->controllerName = substr($viewModel->controllerName, 0, strpos($viewModel->controllerName, '/'));
     }
 }

然后从布局代码中按如下方式使用它:

echo $this->layout()->controllerName;

第一个问题是下面的代码应该替换为使用 ZF2 函数获取 Controller 名称的东西(更“漂亮”):

(...)
// Parsing URI to get controller name
$viewModel->controllerName = trim($_SERVER['REQUEST_URI'],'/');
if (substr_count($viewModel->controllerName, '/')) {
    $viewModel->controllerName = substr($viewModel->controllerName, 0, strpos($viewModel->controllerName, '/'));
}

我想避免从所有 Controller / Action 中注入(inject) Controller 名称:这是通过使用 Module.php 解决的,但也许是更直接的方法。

谢谢!

最佳答案

您正在寻找此链接:How to get the controller name, action name in Zend Framework 2

$this->getEvent()->getRouteMatch()->getParam('action', 'index'); 
$this->getEvent()->getRouteMatch()->getParam('controller', 'index');

否则你在这里有同样的问题(和答案):ZF2 - Get controller name into layout/views

MvcEvent – 从布局中获取 NAMESPACE/模块名称 http://samsonasik.wordpress.com/2012/07/27/zend-framework-2-mvcevent-layout-view-get-namespace/

我没有测试,但它似乎是正确的:http://pastebin.com/HXbVRwTi

关于zend-framework2 - Zend Framework 2 从布局中获取 Controller 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17306573/

相关文章:

zend-framework2 - ZF2 - Zend Framework 2,了解路由

php - Zend框架2 : Debugging Plugin

mysql - Zend 框架 2 : LEFT JOIN issue

git - 为什么来自 github 的递归子模块更新对于 DoctrineMongoORMModule 失败?

php - 如果用户未登录,ZF2 在每个页面上重定向到登录页面

php - zend framework 2 动态面包屑 - 传递参数

zend-framework2 - Zend Framework 2 - Cookie 概念

php - 如何从 Zend Framework 2 中的 Controller 修改表单验证器?

php - 使用 BINARY 查询 ZF2 模型

zend-framework2 - 如何更改 ZF2 中的 session cookie 路径?