在我的layout.html.twig
(这是所有页面使用的基本布局)中,我有以下一行:
<body class="{{ render(controller('MyMainBundle:Main:bodyClass')) }}">
问题在于我想根据控制器和操作输出不同的类,但在“Main”控制器的“bodyClassAction”方法中,$request->attributes->get('_controller')
显然会返回MyMainBundle:Main:bodyClass
。
所以,现在,我正在解析URL($_SERVER['REQUEST_URI']
)以确定我应该返回哪个类,这不是很干净。
有没有办法知道“原始”或“父”控制器和动作?
也许我根本不应该使用{{ render(controller(...)) }}
?
答案 0 :(得分:0)
也许我根本不应该使用{{render(controller(...))}}?
是的,对此提出子请求有点矫枉过正。在我看来,使用自定义树枝功能可能是实现目标的更好方法。
但要回答你的问题,你需要将控制器作为参数,例如:
{{ render(controller('MyMainBundle:Main:bodyClass', {
'controller': app.request.get('_controller')
})) }}
但更喜欢树枝功能方法。
答案 1 :(得分:0)
良好做法取决于路线。像:
<body class="
{% if app.request.attributes.get('_route') == 'my_route' %}
my-route-class
{% elseif app.request.attributes.get('_route') == 'my_route1' %}
my-route-class2
{% endif %}
">
你可以将这个逻辑移到Twig extension并得到某些东西:
<body class="{{ getBodyClass(app.request.attributes.get('_route')) }}">
在你的范围内:
public function getFunctions() {
return array(
new \Twig_SimpleFunction('getBodyClass', array($this, 'getBodyClass'))
);
}
public functiongetBodyClass($route) {
if ($route === 'my_route_1') {
return 'my-route-class'
} else if ($route === 'my_route_2') {
return 'my-route-class2'
}
return 'default-class';
}