有没有一种简单的方法可以在 Symfony 2 中替换引用者中的 url 参数?

Posted

技术标签:

【中文标题】有没有一种简单的方法可以在 Symfony 2 中替换引用者中的 url 参数?【英文标题】:Is there an easy way to replace an url parameter in a referer in Symfony 2? 【发布时间】:2015-10-30 15:18:50 【问题描述】:

我正在尝试更新引荐来源网址中的参数:

$referer = $request->headers->get('referer');

例如,$referer 是一个带有两个参数的 url:

string(96) "http://<my_url>/web/app_dev.php/urlpart/?param1=value1&param2=value2"

我想轻松地将param1=value1 替换为param1=updatedvalue1,例如用另一个替换。

我知道我们可以使用 twig 和当前请求的 url 来做到这一点:

 path(app.request.attributes.get('_route'),
   app.request.query.all|merge('sort': 'address')) 

是否可以在 Symfony 2 控制器中执行相同的操作来更新引用?

我在PHP 中找到了带有preg_replace 函数的解决方案,我希望有更好的方法来解决它看起来很丑陋,我正在努力寻找更好的解决方案,任何帮助将不胜感激!

$referer = preg_replace('/([?&])(param1)=\w+(&|$)/', '', $referer);
$referer = preg_replace('/(param2)=\w+(&|$)/', '', $referer);

感谢您的帮助!

【问题讨论】:

【参考方案1】:

这应该可行:

$oldReferer = 'http://<my_url>/web/app_dev.php/urlpart/?param1=value1&param2=value2';
$newReferer = Request::create($oldReferer, 'GET', array('param1' => 'updatedvalue1'))->getUri();

【讨论】:

这正是我想要的!

以上是关于有没有一种简单的方法可以在 Symfony 2 中替换引用者中的 url 参数?的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种正确的方法可以在 symfony 中使用 SwiftMailer 包将 NTLM 身份验证类型添加到 SwiftMailer 中?

有没有一种干净的方法来使用 symfony 2.6 设置 websocket

Symfony 4 / doctrine插入初始数据库数据

symfony 3.3中的单个会话实现

Symfony 2:如何检查用户是不是未在模板中登录?

Symfony2 在 YAML 配置中使用 PHP 类常量?