Laravel 5 个命名空间
Laravel 5 namespaces
我刚刚下载 Laravel 5 并开始迁移到它。但是,我发现需要使用名称空间 真的 很烦人。
除了让我的代码变得混乱之外,我觉得我并没有从中得到太多。
如何禁用命名空间要求?
我认为您不应该禁用或删除命名空间。命名空间的主要原因是为了避免与具有相同名称的 classes 发生冲突。一旦应用程序变大,您将拥有 class 个同名的应用程序。来自框架源的示例:
Illuminate\Console\Application
和 Illuminate\Foundation\Application
两者叫法相同。只是因为命名空间你可以导入正确的class。当然你也可以命名它们:
ConsoleApplication
和 FoundationApplication
但是命名空间通常仅在导入文件顶部的 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 = '';
路由正常工作。
我刚刚下载 Laravel 5 并开始迁移到它。但是,我发现需要使用名称空间 真的 很烦人。
除了让我的代码变得混乱之外,我觉得我并没有从中得到太多。
如何禁用命名空间要求?
我认为您不应该禁用或删除命名空间。命名空间的主要原因是为了避免与具有相同名称的 classes 发生冲突。一旦应用程序变大,您将拥有 class 个同名的应用程序。来自框架源的示例:
Illuminate\Console\Application
和 Illuminate\Foundation\Application
两者叫法相同。只是因为命名空间你可以导入正确的class。当然你也可以命名它们:
ConsoleApplication
和 FoundationApplication
但是命名空间通常仅在导入文件顶部的 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 = '';
路由正常工作。