Symfony2 - 在 TWIG 模板中获取当前 URL 或路由?
Posted
技术标签:
【中文标题】Symfony2 - 在 TWIG 模板中获取当前 URL 或路由?【英文标题】:Symfony2 - Get the current URL or route in TWIG template? 【发布时间】:2015-05-08 22:01:18 【问题描述】:我的路线是
admin:
path: /admin/
defaults: _controller: CatalogWebBundle:Admin:admin
如何在 php 模板中获取路由名称?
【问题讨论】:
我猜在twig中你可以使用app.request.attributes.get('_route')
作为php模板你可以导出等效代码
【参考方案1】:
获取当前网址
$request->getRequestUri();
或 app.request.uri
至于路由本身,最好的做法是将它作为参数注入到你的控制器中,参见the doc here。您可以使用$request->attributes->get('_route')
或app.request.attributes.get('_route')
,但它并不可靠,例如won't work with forwards,因为您要转发到控制器,而不是路径。而且它真的只有meant for debugging purposes according to Fabien (@fabpot), the creator,所以我不会为了以后的升级而依赖它。
旁注
记得随时avoid $request->get()
,所以不要$request->get('_route')
,因为我在类似问题的一些答案中看到了
如果您不需要控制器的灵活性,最好 从适当的公共属性显式获取请求参数 而是(属性、查询、请求)
原因是它会查看所述公共属性(属性、查询和请求)而不是仅查看一个(属性),从而使其速度变慢
【讨论】:
尽可能使用 RequestStack:symfony.com/blog/new-in-symfony-2-4-the-request-stack 在服务中使用 RequestStack。请求是控制器的方式。【参考方案2】:直接在 Twig 中做不是一件好事,但你仍然可以做。更好的方法是将它作为参数从控制器传递。
在 Twig 中获取路由参数。
app.request.attributes.get('_route_params')
与
在 Twig 中获取整个包名。
app.request.attributes.get("_controller")
在 Twig 中获取路线名称。
app.request.attributes.get('_route')
【讨论】:
【参考方案3】:要在 Symfony2 中获取路由名称,请输入以下代码 sn-p
$request = $this->container->get('request');
$routeName = $request->get('_route');
在 Symfony2 中获取 URL,
$request = $this->container->get('request');
$routeURL = $request->getRequestUri();
【讨论】:
【参考方案4】:补充一点,在某些情况下,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
。
【讨论】:
【参考方案5】:在 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>
【讨论】:
以上是关于Symfony2 - 在 TWIG 模板中获取当前 URL 或路由?的主要内容,如果未能解决你的问题,请参考以下文章