我目前正在通过大致基于骨架应用程序开发一个小型 MVC 应用程序来学习 ZF2。现在我正在尝试根据匹配的路由隐藏一些固定的 HTML 元素:例如,我不希望在登录阶段显示主菜单。
我可以通过将切换参数作为控制器操作的返回值传递来轻松做到这一点,但感觉不对,所以我想从布局中检查匹配的路由并相应地组合布局。
问题是,我不知道如何在模板中获取匹配的路由。这可能吗?是否有其他解决方案可以避免将布局逻辑添加到控制器中?
经过一些出色的科学怪人工作后进行编辑,我能够找到解决方案。我喜欢使用帮助器的想法,所以我只是尝试从主模块中的 boostrap 函数将 Application 对象传递给它:
$app = $e->getApplication();
$serviceManager = $app->getServiceManager();
....
$serviceManager->get('viewhelpermanager')->setFactory('getRoute', function($sm) use ($app) {
return new Helper\GetRoute($app);
});
和辅助功能:
use Zend\View\Helper\AbstractHelper;
class GetRoute extends AbstractHelper {
private $sm;
public function __construct($app) {
$this->sm = $app->getServiceManager();
}
public function echoRoute() {
$router = $this->sm->get('router');
$request = $this->sm->get('request');
$routeMatch = $router->match($request);
if (!is_null($routeMatch))
echo $routeMatch->getMatchedRouteName();
}
}
也许有一种更清洁、更 ZF2ish 的方式来做到这一点......