Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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路由管理器规则对多个路径失败_Yii2_Yii2 Urlmanager - Fatal编程技术网

Yii2 url路由管理器规则对多个路径失败

Yii2 url路由管理器规则对多个路径失败,yii2,yii2-urlmanager,Yii2,Yii2 Urlmanager,我希望所有路由(api路由除外)都可以导航到站点/索引路由,但所有/api路径都可以执行到相应的模块。 我添加了以下路线规则 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ //api module 'api/<controller:\w+&g

我希望所有路由(api路由除外)都可以导航到站点/索引路由,但所有/api路径都可以执行到相应的模块。 我添加了以下路线规则

    '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',
        ]
    ],
],