Laravel 5 使用语句
Laravel 5 use statements
第一次与 Laravel 5 合作。我了解名称空间的使用以及您需要使用它们的原因。我不明白的是为什么我需要添加如下的使用语句(在控制器的顶部):
use Session;
use Input;
use Response;
我必须这样做,这样我才不会遇到像这样的致命异常:
Class 'App\Http\Controllers\Session' not found
也许我漏掉了什么??这些 类 似乎是框架的一部分,默认情况下在 L4.x.
任何人都可以帮助我理解为什么在 L5 中如此,或者我如何才能避免在 L5 中这样做?
谷歌在这方面让我失望了。
在文件中使用 use
语句的过程称为别名或导入。 http://php.net/manual/en/language.namespaces.importing.php 给出了很好的解释,但简而言之:
- 如果您使用 'relative' 或仅引用 class 的名称(例如
Session
)引用 class,则 PHP 将检查当前命名空间是否存在 class.
- Laravel 4 控制器在技术上不在命名空间中。它们是应用程序根命名空间的一部分,因此对根命名空间 (
Session
) 中另一个 class 的引用会找到它。 Laravel 5 控制器在 App\Http\Controllers\
中命名空间。
- 解决这个问题的唯一方法是告诉 PHP 给定 class 的完整命名空间,例如在本例中
\Session
,因为这些 classes作为根命名空间的一部分添加。例如 new \App\MyCompany\Models\SomeModel();
- class 文件顶部的 "use" 语句允许您将这些完整的 class 路径作为任何您想要的别名。
use \App\MyCompany\Models\SomeModel as Foo
将允许您执行 new Foo()
并获得 \App\MyCompany\Models\SomeModel
的实例。 (大多数人会省略 'as' 语句,仅引用 new SomeModel()
)
- 在尝试利用位于与当前 class。它是一种有用的语言构造,而不是限制。
希望这是有道理的。
第一次与 Laravel 5 合作。我了解名称空间的使用以及您需要使用它们的原因。我不明白的是为什么我需要添加如下的使用语句(在控制器的顶部):
use Session;
use Input;
use Response;
我必须这样做,这样我才不会遇到像这样的致命异常:
Class 'App\Http\Controllers\Session' not found
也许我漏掉了什么??这些 类 似乎是框架的一部分,默认情况下在 L4.x.
任何人都可以帮助我理解为什么在 L5 中如此,或者我如何才能避免在 L5 中这样做?
谷歌在这方面让我失望了。
在文件中使用 use
语句的过程称为别名或导入。 http://php.net/manual/en/language.namespaces.importing.php 给出了很好的解释,但简而言之:
- 如果您使用 'relative' 或仅引用 class 的名称(例如
Session
)引用 class,则 PHP 将检查当前命名空间是否存在 class. - Laravel 4 控制器在技术上不在命名空间中。它们是应用程序根命名空间的一部分,因此对根命名空间 (
Session
) 中另一个 class 的引用会找到它。 Laravel 5 控制器在App\Http\Controllers\
中命名空间。 - 解决这个问题的唯一方法是告诉 PHP 给定 class 的完整命名空间,例如在本例中
\Session
,因为这些 classes作为根命名空间的一部分添加。例如new \App\MyCompany\Models\SomeModel();
- class 文件顶部的 "use" 语句允许您将这些完整的 class 路径作为任何您想要的别名。
use \App\MyCompany\Models\SomeModel as Foo
将允许您执行new Foo()
并获得\App\MyCompany\Models\SomeModel
的实例。 (大多数人会省略 'as' 语句,仅引用new SomeModel()
) - 在尝试利用位于与当前 class。它是一种有用的语言构造,而不是限制。
希望这是有道理的。