[英]Symfony2 - Get the current URL or route in TWIG template?
我的路线是
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
一点,在某些情况下, app.request.uri
不会返回当前页面的 url。
示例:在您的页面模板中,您通过以下方式调用控制器:
{{ render(controller('AppBundle:MyController:myBlock')) }}
在myBlockAction
,你渲染另一个模板,比如block.html.twig
。
要在通话app.request.uri
从block.html.twig
会显示类似:
http://www.example.com/app.php/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3DAppBundle%253AMyController%253AmyBlock
如果你想从block.html.twig
内部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.twig'
<small>Current Url : {{ pageUri }}</small>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.