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 );
}
分享到这里,希望对大家有帮助。
和平。
我英语不好所以我会尽量说清楚:
我在 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 );
}
分享到这里,希望对大家有帮助。
和平。