我正面临着Yii Framework路由的问题.
我已经创建了控制器,我们称之为TestController.php
然后,我需要把它放到一个名为Make的子目录中,所以我的结构看起来像:
controllers/TestController.php
controllers/Make/TestController.php
Run Code Online (Sandbox Code Playgroud)
对于ocurse,如果我更改它的名称,它可以很好地工作,但有没有办法在控制器目录和子目录中放置一个相同名称的控制器?
编辑
我的URLManager配置如下:
'urlManager'=>array(
'showScriptName' => false,
'urlFormat'=>'path',
'rules'=>array(
'gii' => 'gii',
'gii/<controller:\w+>' => 'gii/<controller>',
'gii/<controller:\w+>/<action:\w+>' => 'gii/<controller>/<action>',
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
Run Code Online (Sandbox Code Playgroud)
我有一个控制器Bookmarks.由于我还有一些与书签相关的其他内容,我需要创建一个目录bookmarks并在其中放置一些控制器Categories.
不能强迫它发挥作用.
编辑2
刚检查清洁应用程序.它似乎是一个Yii bug(?).
编辑3
我已根据建议更改了导入配置:
'import'=>array(
'application.models.*',
'application.components.*',
'application.controllers.bookmarks.*'
),
Run Code Online (Sandbox Code Playgroud)
我还创建了正确的路线规则'bookmarks/<controller:\w+>/<action:\w+>'=>'bookmarks/<controller>/<action>',.
我的文件结构现在如下:
BookmarksController.php
bookmarks/CategoriesController.php
Run Code Online (Sandbox Code Playgroud)
这是一个被抛出的异常:
异常'CHttpException',消息'系统无法找到请求的操作"类别".在/home/root/www/yiitesting/framework/web/CController.php:477
在创建任何子目录之前,请注意 Yii 自动加载函数不会搜索子目录:在 Controller 的情况下,Yii 想要自动加载 TestController 类,因此在导入声明中添加 application.controllers.Make.* :
'import'=>array(
.....
'application.controllers.Make.*',
),
Run Code Online (Sandbox Code Playgroud)
当然,您必须向 urlManager 添加规则,以帮助 Yii 像 @ldg 那样查找正确的控制器。
注意:在这种情况下,Yii 将为视图查找 views/Make/*。