请解释Yii2中的路由是如何工作的?

在Yii2中,路由(Routing)负责将HTTP请求映射到相应的控制器动作(Controller Action)。Yii2的路由系统基于规则和约定,具体工作如下:

  1. 路由规则配置:路由规则通过配置文件(通常是 config/web.php)中的 urlManager 组件来定义。规则可以是基于简单的模式匹配,也可以使用正则表达式。

    php
    'components' => [ 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ // 简单规则示例 'about' => 'site/about', // 使用正则表达式的规则示例 'POST <controller:\w+>/<action:\w+>' => '<controller>/<action>', ], ], ],
    • enablePrettyUrl: 启用美化URL,去除入口脚本(如 index.php)。
    • showScriptName: 控制是否显示入口脚本名(默认为 false)。
    • rules: 定义具体的路由规则,将URL映射到控制器动作或其他处理逻辑。
  2. 路由解析:当应用收到一个HTTP请求时,Yii2的 urlManager 组件根据定义的规则,解析请求的URL并确定要调用的控制器和动作。

  3. 控制器和动作执行:根据解析得到的控制器和动作,Yii2实例化相应的控制器对象并调用对应的动作方法。控制器负责处理请求并生成响应。

  4. 参数传递:路由还支持通过URL传递参数,这些参数可以在控制器动作方法中通过参数名获取。例如,/site/view?id=1 中的 id 可以通过 Yii::$app->request->get('id') 获取。

  5. 默认路由:如果请求的URL没有匹配到任何规则,Yii2将使用默认的路由规则,通常是指向一个默认的控制器动作或错误处理器。

通过以上机制,Yii2的路由系统提供了灵活的URL管理和请求处理机制,使得开发者可以通过简单的配置和规则定义来管理应用的URL结构和访问方式。