Drupal / Symfony中是否有通用的URL构建器/操作器?

时间:2017-12-12 14:52:50

标签: symfony drupal-8

如何在Drupal / Symfony上构建和/或修改通用URL?

例如,在输入中输入如下的网址:http://some.url/with?param1=value1#fragment我希望能够操作网址的任何部分,包括:

  • 切断查询(搜索)部分
  • 添加更多查询参数
  • 更改路径部分
  • 替换域名
  • 添加/更改片段

我无法在Drupal或Symfony中找到任何合适的内容。

2 个答案:

答案 0 :(得分:0)

在Drupal 8中有lib/Drupal/Core/Url.php类,它提供了一些获取/设置参数的方法

可用于设置路线参数的方法:

setRouteParameters($parameters)
setRouteParameter($key, $value)

可用于设置路线选项的方法:

setOptions($options)
setOption($name, $value)

如何使用setParameter方法:

/**
* @var Drupal\Core\Url $url
*/
$url->setRouteParameter('arg_0', $arg0);

答案 1 :(得分:0)

使用Symfony 3.3,您可以使用Options +FollowSymLinks -MultiViews RewriteEngine On RewriteBase / RewriteCond %{REQUEST_METHOD} !POST RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC] RewriteRule ^ /%1 [R=302,NE,L] RewriteCond %{REQUEST_METHOD} !POST RewriteCond %{THE_REQUEST} /index\.php [NC] RewriteRule ^(.*)index\.php$ /$1 [L,R=302,NC,NE] RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] RewriteRule ^group/([\w-]+)/?$ sources/group.php?group_username=$1 [L,QSA] RewriteRule ^profile/([\w-]+)/?$ sources/user_profile.php?username=$1 [L,QSA] RewriteRule ^profile/(followers|friends|photos|videos|locations|musics)/([\w-]+)/?$ sources/$1.php?username=$2 [L,QSA] RewriteRule ^admin/(.*)$ admin/index.php?page=$1 [L,QSA] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+?)/?$ $1.php [L] RewriteRule ^(.+?)/?$ index.php?pages=$1 [L,QSA]

Request::create($url)

然后你可以打电话

use Symfony\Component\HttpFoundation\Request;

$url = 'http://some.url/with?param1=value1#fragment'
$req = Request::create($url)

参考http://api.symfony.com/3.3/Symfony/Component/HttpFoundation/Request.html

我不认为此类为host / param / path提供任何setter,因此您可以执行以下操作:

$req->getQueryString() // param1=value1
$req->getHost() // some.url
$req->getSchemeAndHttpHost() // http://some.url
$req->getBaseUrl() // /with

关于哈希片段str_replace($req->getHost(), 'new-host.com', $url) // change host ,它似乎在服务器端不可用(请参阅Get fragment (value after hash '#') from a URL in php)。