如何在 Symfony 2 中获取当前路线?

Posted

技术标签:

【中文标题】如何在 Symfony 2 中获取当前路线?【英文标题】:How do I get the current route in Symfony 2? 【发布时间】:2016-05-21 23:31:29 【问题描述】:

我的所有页面都有一个导航菜单。当用户单击一个链接时,它会打开一个模式表单,用户可以在其中发送消息。当用户单击提交按钮时,我希望控制器返回模态打开时他所在的页面。

【问题讨论】:

你为页面创建了什么路由?还是模块?在routing.yml ? How to get current route in Symfony 2?的可能重复 我已将我的问题编辑得更清楚:它不是当前页面,而是用户单击在灯箱中打开表单时所在的页面 【参考方案1】:

获取controller中的当前路线。

$router = $this->get("router");
$route = $router->match($this->getRequest()->getPathInfo());
var_dump($route['_route']);

$request = $this->container->get('request');
$routeName = $request->get('_route');

获取twig中的当前路线

app.request.get('_route')

【讨论】:

谢谢,但它不起作用,使用这段代码我得到了我所在的控制器的路由 您要求获取当前路线。我的回答在 twig 中返回正确的当前路线。您需要添加一个隐藏字段并将当前路线放入其中。然后相应地更改模态提交操作 是的,我认为隐藏字段是唯一的解决方案,我会试试这个。谢谢【参考方案2】:

好的,所以帖子有点旧,但对于其他寻找类似内容的人,我建议使用不同的方式处理消息表单,使用 javascript 拦截提交并通过 ajax 帖子发送序列化数据。

然后控制器可以返回简单的成功消息或带有任何错误消息的表单视图。

用户可以尝试重新发送消息或关闭模式,或者如果提交成功,您可以使用 window.timeout 为他们自动关闭它。用户永远不会离开原始页面,也不必等待页面重新加载。

像 jQuery 这样的库会让这很容易实现,例如

$(document).on("click","button#messageSend",function(e)
    tht = $(this);
    frm = tht.closest("form");
    container = frm.parent()
    e.preventDefault();
    $.ajax(
        url: frm.attr("action"),
        method: "POST",
        data: frm.serialize(),
        dataType: "html"
    ).done(function(data)
        container.html(data);
        // Add any additional processing here
    );
    return false;
);

【讨论】:

【参考方案3】:

在树枝模板中生成路径:

 path(app.request.attributes.get('_route'), 
    app.request.attributes.get('_route_params')) 

或获取当前请求 uri:

 app.request.uri 

您也可以考虑在叠加层中创建模态窗口,这样用户只需关闭模态窗口即可返回当前页面。

【讨论】:

app.request.uri 给我打开消息表单的路线,所以这不是我想要的。是的,用户可以通过关闭返回到当前页面,但是当他发送消息时,我必须指定到我的控制器的路由,并且我希望返回当前页面,就像用户关闭模式一样 如果您尝试在实际处理消息发送的请求中使用 app.request.uri ,它将不起作用,因为它是一个单独的 http 请求...您可能希望将返回路径传递为一个隐藏的表单输入,但老实说,就您提供的详细信息而言,我认为您不会得到太多帮助。

以上是关于如何在 Symfony 2 中获取当前路线?的主要内容,如果未能解决你的问题,请参考以下文章

Symfony - 如何获取控制器的主要路线?

Symfony 5:如何从路由规则中获取选项数据

如何使用 Symfony 2 在单元测试中获取当前登录的用户?

如何在 Symfony 布局中获取 _locale 变量?

如何在 Symfony2 中获取代表当前用户的实体?

如何在 symfony 2 中获取根路由