子文件夹中控制器的路由



在我的Yii2项目中,我试图使用以下目录结构来组织我的控制器:

/controllers/ReportController.php
/controllers/report/Report1Controller.php
/controllers/report/Report2Controller.php
/controllers/report/Report3Controller.php

命名空间为

appcontrollers
appcontrollersreport
appcontrollersreport
appcontrollersreport

所有控制器包含

public function actionIndex()

函数。

访问URL

https://myreporting.test/report

正确路由到

controllers/ReportController.php - actionIndex()

当我试图访问URL

https://myreporting.test/report/report1

返回404错误,而不是路由到

controllers/report/Report1Controller.php - actionIndex()

我如何才能实现框架正确路由到子目录中控制器的索引操作?主ReportController不包含任何具有冲突名称的操作。

你必须设置url管理器来识别这样的路由。你可以在你的web.php配置中这样做。例如:

'components' => [
'urlManager' => [
'class' => yiiwebUrlManager::class,
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'report/<controller:w+>/<action:w+>/<id:(d|w)+>' => 'report/<controller>/<action>',
'report/<controller:w+>/<action:w+>' => 'report/<controller>/<action>',
'<controller:w+>/<action:w+>/<id:(d|w)+>' => '<controller>/<action>',
'<controller:w+>/<action:w+>' => '<controller>/<action>',
],
],
// ... other components ...
].
// ... other configurations ...

你也可以动态设置文件夹部分,例如使用如下规则

'<folder:w+>/<controller:w+>/<action:w+>' => '<folder>/<controller>/<action>'

但我不建议这样做,因为模块也使用了类似的模式。

相关内容

  • 没有找到相关文章

最新更新