Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii2路径格式递归URL_Url_Recursion_Yii2_Yii2 Advanced App_Yii2 Basic App - Fatal编程技术网

Yii2路径格式递归URL

Yii2路径格式递归URL,url,recursion,yii2,yii2-advanced-app,yii2-basic-app,Url,Recursion,Yii2,Yii2 Advanced App,Yii2 Basic App,我的英语不好,因此我将尽可能清楚: 我在Yii2中有一个项目,它有一个高级模板,在数据库中我有一个递归表,它表示一个类别和条目树,你可以想象它是一个文件夹树,可以有无限的文档和文件夹(可以在另一个文件夹中创建一个文件夹),我用这种格式创建了url localhost://my-project/root-category/sub-cat-A/sub-cat-B/25-document 我需要获取当前Url的最后一部分,因为整个Url在Url最后一部分的条目之前可以有N个级别,格式如下: <i

我的英语不好,因此我将尽可能清楚:

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

localhost://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类并覆盖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 );
}
我分享这个,希望能帮助你们中的任何人

和平