Laravel 5 使用语句

Joe*_*ger 5 php laravel-5

第一次使用 Laravel 5。我了解命名空间的使用以及为什么需要使用它们。我不明白的是为什么我需要添加如下所示的 use 语句(在控制器的顶部):

use Session;
use Input;
use Response;
Run Code Online (Sandbox Code Playgroud)

我必须这样做,这样我就不会遇到致命的异常,例如:

Class 'App\Http\Controllers\Session' not found
Run Code Online (Sandbox Code Playgroud)

也许我错过了什么?这些类似乎是框架的一部分,默认情况下位于 L4.x 中。

谁能帮助我理解为什么在 L5 中会出现这种情况,或者我如何避免在 L5 中这样做?

谷歌在这一点上让我失望了。

小智 5

在文件中使用语句的过程use称为别名或导入。http://php.net/manual/en/language.namespaces.importing.php对此给出了很好的解释,但简而言之:

  • 如果您使用“相对”或仅使用类名称(例如Session)引用一个类,PHP 将检查当前名称空间是否存在该类。
  • 从技术上讲,Laravel 4 控制器并不在命名空间中。它们是应用程序的根命名空间的一部分,因此对根命名空间 ( ) 中另一个类的引用Session将找到这一点。Laravel 5 控制器的命名空间为App\Http\Controllers\.
  • 解决这个问题的唯一方法是告诉 PHP 给定类的完整命名空间,例如在本例中\Session,因为这些类被添加为根命名空间的一部分。一个例子是这样的new \App\MyCompany\Models\SomeModel();
  • 类文件顶部的“use”语句允许您将这些完整的类路径别名为您想要的任何名称。use \App\MyCompany\Models\SomeModel as Foo将允许您执行new Foo()并获取 的实例\App\MyCompany\Models\SomeModel。(大多数人会省略“as”声明,而只是引用new SomeModel())
  • use当尝试利用与当前类不同的命名空间中的类时,没有办法也无需尝试避免将这些语句添加到您的类中。它是该语言的有用构造,而不是限制。

希望这是有道理的。