【发布时间】:2014-07-31 01:26:07
【问题描述】:
为了组织我的控制器,我想将它们分类到文件夹中。例如,我有一个管理面板,它使用了许多我不想与其他控制器混淆的控制器。我将这些控制器移动到我的 /controllers 目录中的一个文件夹中。
所以我的结构是这样的:
controllers /
BaseController.php
HomeController.php
admin /
AdminController.php
现在我的管理控制器看起来像这样:
namespace Admin;
class AdminController extends \BaseController {
public function getHome() {
return \View::make('admin.home');
}
}
然后我可以为我的管理面板做一个分组路由:
Route::group(['namespace' => 'Admin'], function() {
Route::get('admin', ['as' => 'admin', 'uses' => 'AdminController@getHome']);
});
这绝对没有错,我发现必须使用 \ 为这些控制器中的每个类命名空间是一件令人讨厌的事情。有没有办法可以消除必须在管理员下对这些控制器中的每个类进行命名空间的使用?例如,我不想输入\View::make(),我想输入View::make()。
【问题讨论】:
-
解决这个问题的唯一方法是将
use View;放在 PHP 文件的顶部,在namespace声明之后(实际上是对 PHP 说“从全局命名空间获取视图”并将其导入此处供我使用,就好像相对')。 -
那么对于每个类我都需要使用它来引用它?
-
我无法将它们合二为一?
-
如果你在一个命名空间中,你基本上将自己与全局命名空间疏远了,所以你需要在每个命名空间类中使用
use(或你知道的``)想要从全局命名空间导入。那是(相当烦人的)妥协。幸运的是,全局函数之类的东西可以工作,因为 PHP 在当前命名空间中尝试该函数,然后通过命名空间向后跟踪,直到找到与您使用的名称匹配的函数。但它不会对类执行此操作。 -
那么我猜最简单的方法就是在类前面加上命名空间。