Yii-子目录中的控制器
我面临Yii框架路由的问题 我已经创建了控制器,我们称之为TestController.php 然后,我需要将其放入一个名为Make的子目录中,这样我的结构将如下所示:Yii-子目录中的控制器,yii,Yii,我面临Yii框架路由的问题 我已经创建了控制器,我们称之为TestController.php 然后,我需要将其放入一个名为Make的子目录中,这样我的结构将如下所示: controllers/TestController.php controllers/Make/TestController.php 当然,如果我更改了它的名称,它工作得很好,但是有没有办法将相同名称的控制器放在controllers目录和子目录中 编辑 我的URLManager配置如下所示: 'urlManager'=>
controllers/TestController.php
controllers/Make/TestController.php
当然,如果我更改了它的名称,它工作得很好,但是有没有办法将相同名称的控制器放在controllers目录和子目录中
编辑我的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>',
),
),
我还创建了一个正确的路由规则“bookmarks/”=>“bookmarks/”,
我的文件结构现在如下所示:
BookmarksController.php
bookmarks/CategoriesController.php
下面是引发的异常:
异常“CHttpException”,消息为“系统无法找到”
中请求的操作“类别”。”
/home/root/www/yiitesting/framework/web/CController.php:477
您是否尝试通过/Make/test而不是/test访问?这项功能应该是现成的。干杯您应该能够使用如下条目更新URL管理器:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'Make/<controller:\w+>/<action:\w+>'=>'Make/<controller>/<action>',
...
'urlManager'=>数组(
“urlFormat'=>“路径”,
'规则'=>数组(
“Make/”=>“Make/”,
...
然后通过/Make/test[/action]访问该控制器。在创建任何子目录之前,请注意Yii autoload函数不会搜索子目录:Yii我想在控制器的情况下自动加载TestController类,因此在导入声明中添加application.controllers.Make.*:
'import'=>array(
.....
'application.controllers.Make.*',
),
当然,您必须向urlManager添加一条规则,以帮助Yii像@ldg一样查找正确的控制器
注意:在这种情况下,Yii将查找视图/Make/*以查看该视图。My nginx config:
最后重写^/(.*)/index.php
我的Yii urlManager配置:
'urlManager'=>数组(
“urlFormat'=>“路径”,
'showScriptName'=>false,
'规则'=>数组(
'/'=>'/',
'//'=>'//',
)
),
以下urlManager配置也可以工作:
'urlManager'=>数组(
“urlFormat'=>“路径”,
'showScriptName'=>false,
'规则'=>数组(
'/'=>'/',
'//'=>'//',
)
),
是的,我当然试过了。异常已被抛出-找不到操作。似乎Yii正在TestController中搜索操作并忽略Make/TestController。有什么想法吗?我使用gii模块添加TestController和Make/TestController(参见屏幕)这对我来说很有效。如果你看到有很多控制器可以进入模块内部,你仍然可以创建一个名为Make的模块。但是,这不是它的主要用途,它可以这样工作。是的,现在让我们忽略其他一切。我也在使用Gii,但路由不起作用。请参阅我对ldg答案的评论。不幸的是,
异常“CHttpException”,消息为“系统无法找到请求的操作“Test”
。似乎Yii忽略了我的路由规则,它试图在Test controller中搜索测试操作,但没有搜索Make/Test controller。奇怪。我通过在controller的主目录中创建MakeTest controller暂时解决了这个问题,但我认为必须有其他方法来解决。请发布您的url管理器配置和url你想打开吗?我在官方的YIi支持论坛上问了一个问题。这里是链接:。我还试图复制这个问题(如论坛上发布的)面对同样的问题。似乎不可能使用Yii实现这样的功能-这对我来说真的很奇怪-我无法保证这是正确的答案,因为我几天前才开始使用Yii(这没有问题,但基本上没有足够的经验来提供有用的答案)。您试图访问“bookmarks/CategoriesController.php”的url是什么?如果您转到bookmarks/Categories,它应该在CategoriesController中查找actionIndex。请确保您放置了“bookmarks”首先是ULR规则。它应该基本上与Gii相同的路由,因此如果这对您有效,也应该如此。这是正常的行为!您在这里期望什么?您只有一个/bookmarks/前缀,并且希望在两个控制器之间共享?如果您将/bookmarks/的路由规则置于默认路由之前(“/”=>)你可以正常访问你的/bookmarks/categories/,但CategoriesController不可用!你完全正确。我的方法是错误的,因为某些原因。感谢你的努力。我只做了规则配置,工作很好“/”=>“/”,我还必须更改访问控制的路径。。。
'import'=>array(
.....
'application.controllers.Make.*',
),
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
'<path:\w+>/<controller:\w+>/<action:\w+>'=>'<path>/<controller>/<action>',
)
),
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
'<abc:\w+>/<controller:\w+>/<action:\w+>'=>'<abc>/<controller>/<action>',
)
),