[英]How can I get get params in url via slashes in Yii2?
我想通过斜杠获取带有参数的URL。
例如,我想要以下代码:
Url::to(['/controller/action',
'filter' => 'filter,
'param1' => 'value1',
'param2' => 'value2' ...]);
生成URL://path.to.site/controller/action/filter/param1/value1/param2/value2 ...
有没有办法通过defaut urlManager做到这一点?
当然:
'urlManager' => [
'rules' => [
'<controller>/<action>/<filter>/param1/<param1>/param2/<param2>' => '<controller>/<action>',
],
],
然后Url::to
将返回以下结果:
Url::to([
'/controller/action',
'filter' => 'some-filter',
'param1' => 'value1',
'param2' => 'value2'
]);
// Result: http://base.url/controller/action/some-filter/param1/value1/param2/value2
use Yii;
use yii\web\UrlRuleInterface;
class SearchUrlRule implements UrlRuleInterface
{
public function parseRequest($manager, $request)
{
$pathInfo = $request->getPathInfo();
if (strpos($pathInfo, 'somepath') !== 0) {
return false;
}
$parameters = explode('/', $pathInfo);
if ($parameters[1] !== 'f') {
return false;
}
$route = 'controller/action';
$params = [
'filter' => 'f'
];
$count = count($parameters);
$i = 2;
var_dump($parameters);
while (($i + 1) < $count) {
$params[$parameters[$i]] = $parameters[$i + 1];
$i = $i + 2;
}
Yii::trace("Request parsed with URL rule: action/controller", __METHOD__);
return [$route, $params];
}
public function createUrl($manager, $route, $params)
{
if ($route !== 'controller/action') {
return false;
}
if ($params['filter'] !== 'f') {
return false;
}
unset($params['filter']);
//If a parameter is defined and not empty - add it to the URL
$url = 'somepath/f/';
foreach ($params as $k => $param) {
$url .= "$k/" . $param;
}
return $url;
}
}
这是代码,解决了我的问题。 并在配置中:
'rules' => [
...
['class' => 'frontend\components\SearchUrlRule'],
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.