我有不同控制器和操作的跟踪路径,所有控件和操作都显示相同的布局和不同的视图,例如:
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, '/'));
}
我想避免从所有控制器/操作注入Controller名称:这是通过使用Module.php解决的,但可能是一种更直接的方式。
谢谢!
答案 0 :(得分:3)
您正在寻找此链接: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
答案 1 :(得分:3)
我知道这是一个老问题,但有一个简单的答案应该在这里注意:
$this->getHelperPluginManager()->getServiceLocator()->get('Application')->getMvcEvent()->getRouteMatch()->getParam('action')
这将返回任何路线参数,&#39;动作&#39;在这种情况下。 此代码可以在视图或布局中使用。