如何在Drupal / Symfony上构建和/或修改通用URL?
例如,在输入中输入如下的网址:http://some.url/with?param1=value1#fragment
我希望能够操作网址的任何部分,包括:
我无法在Drupal或Symfony中找到任何合适的内容。
答案 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)。