繁体   English   中英

如何通过Yii2中的斜线获取url中的参数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM