我有以下通往不同控制器和动作的路线,它们都显示相同的布局和不同的视图,例如:
http://<my domain>/controllername1/action1
http://<my domain>/controllername1/
http://<my domain>/controllername2/action1
http://<my domain>/controllername3/action1
如何获取在布局代码中加载布局的控制器名称?返回:“ controllername1 ”、“ controllername2 ”或“ controllername3 ”
目标是确定我在网站的哪个部分,并在布局中进行一些自定义。
我检查了类似的回复,但都是针对旧版本的 Zend Framework。
澄清: 这个想法是从布局代码中获取控制器名称,而不是从控制器代码中传递它。也许不可能?其他答案适用于 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 函数来获取控制器名称的东西(更“漂亮”):
(...)
// 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, '/'));
}
我想避免从所有控制器/动作中注入控制器名称:这可以通过使用 Module.php 来解决,但可能是一种更直接的方法。
谢谢!