Laravel 5使用语句

时间:2015-03-12 03:02:10

标签: php laravel-5

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

use Session;
use Input;
use Response;

我必须这样做,以便我不会得到致命的例外,例如:

Class 'App\Http\Controllers\Session' not found

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

任何人都可以帮助我理解为什么在L5中会出现这种情况,或者我如何避免在L5中执行此操作?

谷歌在这一次失败了。

1 个答案:

答案 0 :(得分:2)

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

  • 如果使用'relative'或类名称(例如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语句添加到类中。它是一种有用的语言结构,而不是限制。

希望这是有道理的。