我的路线是
admin:
path: /admin/
defaults: { _controller: CatalogWebBundle:Admin:admin }
如何在PHP模板中获取路由名称?
获取当前URL
$request->getRequestUri();
或app.request.uri
至于路由本身,最佳实践是将其作为参数注入控制器中,请参阅此处的文档。您可以使用$request->attributes->get('_route')
或app.request.attributes.get('_route')
,但它不那么可靠,例如,它不能像转发到控制器而不是路径那样使用转发。根据创建者Fabien(@fabpot)的说法,它实际上只是为了调试目的,所以为了未来的升级,我不会依赖它。
旁注
记住尽可能避免$request->get()
,所以没有$request->get('_route')
,就像我在类似问题的一些答案中看到的那样
如果你不需要控制器的灵活性,最好从适当的公共属性显式获取请求参数相反(属性、查询、请求)
原因是它将在所述公共属性(属性、查询和请求)中查找,而不仅仅是一个(属性),这使得速度慢得多
直接在Twig中做不是一件好事,但你仍然可以这样做。更好的方法是将其作为控制器的参数传递。
在Twig中获取路线参数。
{{ app.request.attributes.get('_route_params') }}
和
获取Twig中的整个捆绑包名称。
{{ app.request.attributes.get("_controller") }}
在Twig中获取路线名称。
{{ app.request.attributes.get('_route') }}
要在Symfony2中获取路由名称,请输入以下代码段
$request = $this->container->get('request');
$routeName = $request->get('_route');
要在Symfony2、中获取URL
$request = $this->container->get('request');
$routeURL = $request->getRequestUri();
补充说,在某些情况下,app.request.uri
不会返回当前页面的url。
示例:在您的页面模板中,您通过调用控制器
{{ render(controller('AppBundle:MyController:myBlock')) }}
在myBlockAction
中,渲染另一个模板,比如block.html.twig
。
从block.html.twig
调用app.request.uri
将显示以下内容:
http://www.example.com/app.php/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3DAppBundle%253AMyController%253AmyBlock
如果你想从block.html.twig
内部获得渲染页面的绝对url,你可以从php$_SERVER变量中重新组装它:
{{ app.request.server.get('REQUEST_SCHEME') ~ '://' ~
app.request.server.get('SERVER_NAME') ~
app.request.server.get('PHP_SELF') }}
如果需要,也可以添加QUERY_STRING
。
在symfony5上,您可以执行此操作。
调用控制器块并传递当前url:
{{ render_esi(controller('App''Controller''Frontend''BlockController::social',{'pageUri': app.request.uri })) }}
和
<?php
namespace App'Controller'Frontend;
use Symfony'Bundle'FrameworkBundle'Controller'AbstractController;
class BlockController extends AbstractController {
public function social($pageUri) {
return $this->render('block/_social.html.twig', ['pageUri' => $pageUri]);
}
}
输出分支:'block/_social.html.trick'
<small>Current Url : {{ pageUri }}</small>