Laravel 5 个命名空间

Laravel 5 namespaces

我刚刚下载 Laravel 5 并开始迁移到它。但是,我发现需要使用名称空间 真的 很烦人。

除了让我的代码变得混乱之外,我觉得我并没有从中得到太多。

如何禁用命名空间要求?

我认为您不应该禁用或删除命名空间。命名空间的主要原因是为了避免与具有相同名称的 classes 发生冲突。一旦应用程序变大,您将拥有 class 个同名的应用程序。来自框架源的示例:

Illuminate\Console\ApplicationIlluminate\Foundation\Application

两者叫法相同。只是因为命名空间你可以导入正确的class。当然你也可以命名它们:

ConsoleApplicationFoundationApplication

但是命名空间通常仅在导入文件顶部的 class 时使用:

use `Illuminate\Console\Application`

名称本身在代码中无处不在。太长的 class 名称确实会使您的代码混乱。

除了命名之外,命名空间还鼓励更好的结构并帮助了解文件的位置。那是因为 Laravel 的默认结构是 PSR-4 兼容的。这意味着如果你有一个控制器 App\Http\Controllers\HomeController 你可以肯定你会在 app/Http/Controllers.

下找到一个 HomeController.php

I am aware of that, but it's not needed in the project I am working on.

也许它对当前项目没有意义,但习惯命名空间将帮助您处理未来更大的项目

And being a Sublime Text user, which doesn't have autoimport, it really gets to be a pain

我不太了解 Sublime Text,但 CodeIntel 可能有自动导入功能。否则考虑切换到另一个编辑器/IDE。我强烈推荐 JetBrains PhpStorm


最后,如果您仍然不想使用名称空间,请继续使用 Laravel 4 或搜索其他遵循较少良好实践的框架...


正在从您的应用中删除命名空间 classes

虽然完全不推荐这样做,但至少可以删除应用程序中的一些命名空间。

例如默认控制器命名空间 App\Http\Controllers 可以在 RouteServiceProvider:

中更改为完全没有命名空间
protected $namespace = '';

对于您的模型,您只需删除文件中的名称空间即可。但请记住,如果没有命名空间,PSR-4 自动加载将不再有效。您必须使用 classmap in composer.json

自动加载您的文件

您可以通过在 composer.json 文件的全局命名空间中定义它们来避免为自己的 类 使用命名空间。像这样:

"autoload": {
    "psr-0": {
    "": ["app/Http/Controllers/",
        "app/models/",
        "app/helpers"
        ]
},

您还必须将 app/Providers/RouteServiceProvider.php 更改为:

protected $namespace = '';

路由正常工作。