Yii2路径格式递归网址

时间:2016-05-09 16:45:55

标签: url recursion yii2 yii2-advanced-app yii2-basic-app

我不擅长英语,所以我会尽量保持清晰:

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

本地主机://我的项目/根类别/子猫-A /子猫-B / 25的文档

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

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

但我不知道任何可以解决此问题的Url规则。

感谢您的回答。

谢谢。

1 个答案:

答案 0 :(得分:1)

我自己解决了这个问题,我将告诉你如何解决,或者你是否有人可以改进这个答案:

我正在使用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 );
}

我正在分享这个希望可以帮助你们任何人。

和平。