簡體   English   中英

Yii2中的自定義UrlRule

[英]Custom UrlRule in Yii2

我在yii2中遇到了一個問題,當每個參數可能都被遺漏時,用一些參數創建了一個url。 例如:

site.com/index/param1/value1/param2/valu2/param3/value3/param4/value4

要么:

site.com/param2/value2/param4/value4

只有四個帶有固定名稱的參數。 我嘗試搜索此文件,但沒有找到合適的文檔。

public function createUrl ($ manager, $ route, $ params)
    {
        if ($ route === 'site / index') {
            if (isset ($ params ['ship']) OR isset ($ params ['map']) OR isset ($ params ['gamemode']) OR isset ($ params ['version'])) {
                return (isset ($ params ['ship']))? $ params ['ship']. '/' ''
                . (isset ($ params ['map']))? $ params ['map']. '/' ''
                . (isset ($ params ['gamemode']))? $ params ['gamemode']. '/' ''
                . (isset ($ params ['version']))? $ params ['version']. '/', '';
            }
        }
        return false;
    }

    public function parseRequest ($ manager, $ request)
    {
        $ pathInfo = $ request-> getPathInfo ();
        if (preg_match ('% ^ (\ w +) (/ (\ w +))? $%', $ pathInfo, $ matches)) {

        }
        return false;
    }

另外,我無法理解在parseRequest中做什么以及在何處使用$ params。

您可以像這樣向urlManager添加一些規則:

'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            ...
            'site/param1/<param1:\w+>' => 'site/action',
            'site/param2/<param2:\w+>' => 'site/action',
            'site/param3/<param3:\w+>' => 'site/action',
            'site/param4/<param4:\w+>' => 'site/action',
            'site/param1/<param1:\w+>/param2/<param2:\w+>' => 'site/action',
            'site/param1/<param1:\w+>/param3/<param3:\w+>' => 'site/action',
            'site/param1/<param1:\w+>/param4/<param4:\w+>' => 'site/action',
            'site/param2/<param2:\w+>/param3/<param3:\w+>' => 'site/action',
            'site/param2/<param2:\w+>/param4/<param4:\w+>' => 'site/action',
            'site/param3/<param3:\w+>/param4/<param4:\w+>' => 'site/action',
            'site/param1/<param1:\w+>/param2/<param2:\w+>/param3/<param3:\w+>' => 'site/action',
            'site/param1/<param1:\w+>/param2/<param2:\w+>/param4/<param4:\w+>' => 'site/action',
            'site/param1/<param1:\w+>/param3/<param3:\w+>/param4/<param4:\w+>' => 'site/action',
            'site/param2/<param2:\w+>/param3/<param3:\w+>/param4/<param4:\w+>' => 'site/action',
            'site/param1/<param1:\w+>/param2/<param2:\w+>/param3/<param3:\w+>/param4/<param4:\w+>' => 'site/action',
            ...

這可能不是最優雅的方法,但是它仍然有效。 當有更多參數時,主要問題就來了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM