Yii2 url路由管理器规则对多个路径失败
我希望所有路由(api路由除外)都可以导航到站点/索引路由,但所有/api路径都可以执行到相应的模块。 我添加了以下路线规则Yii2 url路由管理器规则对多个路径失败,yii2,yii2-urlmanager,Yii2,Yii2 Urlmanager,我希望所有路由(api路由除外)都可以导航到站点/索引路由,但所有/api路径都可以执行到相应的模块。 我添加了以下路线规则 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ //api module 'api/<controller:\w+&g
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
//api module
'api/<controller:\w+>/<action:[\w\-]+>' => '<controller>/<action>',
'api/<controller:\w+>' => 'api/<controller>',
//all other paths
'<controller:[\w\-]+>/<action:[\w\-]+>' => 'site/index',
'<controller:[\w\-]+>/' => 'site/index',
],
],
但是当我访问超过2条路径的路由时
/users/create/12
/admin/uom/create/new
不会将路由重新更正为站点/索引
我还需要添加什么来确保所有路径(即使路径超过3条)都是通过站点/索引执行的,而带有api前缀的路由则是通过controller/action
或/api/controller
执行的
我遗漏了什么?这种情况没有内置的支持。但您可以创建与任何路由匹配的自定义URL规则:
class FallbackUrlRule extends Component implements UrlRuleInterface {
public $route = 'site/index';
public function parseRequest($manager, $request) {
return [$this->route, []];
}
public function createUrl($manager, $route, $params) {
return false;
}
}
并在应用程序配置中使用它:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
//api module
'api/<controller:\w+>/<action:[\w\-]+>' => '<controller>/<action>',
'api/<controller:\w+>' => 'api/<controller>',
//all other paths
[
'class' => FallbackUrlRule::class,
'route' => 'site/index',
]
],
],
'urlManager'=>[
“enablePrettyUrl”=>true,
'showScriptName'=>false,
“规则”=>[
//api模块
“api/”=>“/”,
“api/”=>“api/”,
//所有其他路径
[
'class'=>FallbackUrlRule::class,
“路由”=>“站点/索引”,
]
],
],
注意,它将简单地忽略请求路径并捕获所有请求,包括那些应该抛出404错误的请求。它也不会检测路径中的参数(它将忽略/users/create/12
中的12
)
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
//api module
'api/<controller:\w+>/<action:[\w\-]+>' => '<controller>/<action>',
'api/<controller:\w+>' => 'api/<controller>',
//all other paths
[
'class' => FallbackUrlRule::class,
'route' => 'site/index',
]
],
],