Yii2 路径格式递归 URL

Yii2 Path format recursive URL

我英语不好所以我会尽量说清楚:

我在 Yii2 中有一个项目有一个高级模板,在数据库中我有一个递归 table 代表类别和条目的树,你可以把它想象成一个文件夹树,可以有无限的文档和文件夹(另一个文件夹中的文件夹是可能的),我以这种格式创建了 url;

本地主机://my-project/root-category/sub-cat-A/sub-cat-B/25-document

我需要获取当前 Url 的最后一部分,因为整个 Url 在位于 Url 最后一部分的条目之前可以有 N 层格式如下:

<id:\d+>-<slug:[A-Za-z0-9-_.]+>

但我不知道有什么 Url 规则可以解决这个问题。

感谢您的回答。

谢谢。

我自己解决了,我会告诉你如何解决,或者你们是否可以改进这个答案:

我正在使用 codemix/yii2-localeurls 扩展,我的意思是我必须扩展 codemix\localeurls\UrlManager class 并像这样覆盖 parseRequest 方法:

public function parseRequest( $request ) {
    $pathInfo    = $request->getPathInfo();
    $matches     = 0;
    $has_matches = preg_match( '%(bussiness-lines|lineas-de-negocio)\/(.)+\/%', $pathInfo, $matches );

    if ( $has_matches ) {
        /*
         * GET THE LAST SECTION FROM THE URL
         */
        $explode_patInfo = explode( '/', $pathInfo );
        $tree_element    = end( $explode_patInfo );

        /*
         * SEPARATES THE ID AND THE SLUG FROM THE URL
         */
        $tree_element_explode = explode( '-', $tree_element );
        $tree_element_id      = reset( $tree_element_explode );

        unset( $tree_element_explode[0] );

        $tree_element_slug = implode( '-', $tree_element_explode );

        /*
         * RETURN THE CONTROLLER/ACTION AND ITS PARAMS TO PROCESS THE REQUEST
         */
        if ( $tree_element !== false ) {
            return [
                'site/get-tree-element',
                [
                    'id'   => $tree_element_id,
                    'slug' => $tree_element_slug
                ]
            ];
        }
    }

    //IF THE REQUEST DOES NOT CORRESPOND TO MY CUSTOM URL RULE, LETS THE PARENT DO THE JOB
    return parent::parseRequest( $request );
}

分享到这里,希望对大家有帮助。

和平。