Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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
Yii-子目录中的控制器_Yii - Fatal编程技术网

Yii-子目录中的控制器

Yii-子目录中的控制器,yii,Yii,我面临Yii框架路由的问题 我已经创建了控制器,我们称之为TestController.php 然后,我需要将其放入一个名为Make的子目录中,这样我的结构将如下所示: controllers/TestController.php controllers/Make/TestController.php 当然,如果我更改了它的名称,它工作得很好,但是有没有办法将相同名称的控制器放在controllers目录和子目录中 编辑 我的URLManager配置如下所示: 'urlManager'=>

我面临Yii框架路由的问题

我已经创建了控制器,我们称之为TestController.php

然后,我需要将其放入一个名为Make的子目录中,这样我的结构将如下所示:

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