我在Laravel中创建了一个使用以下use
的控制器:
use Illuminate\Http\Request;
控制器如何知道找到Request
的位置?
控制器本身位于:
app\Http\Controllers\LoginController.php
但请求在:
vendor\laravel\framework\src\Illuminate\Http\Request.php
那么为什么use
:
use Illuminate\Http\Request;
......而不是:
use vendor\laravel\framework\src\Illuminate\Http\Request;
这也有效吗? 控制器如何知道从哪里开始搜索?
答案 0 :(得分:4)
Laravel在其核心使用composer并拥有PSR-0 / PSR-4兼容的自动加载器。
PSR-0和PSR-4标准规定了如何根据命名空间解析文件夹。 laravel的Autoloader,通过PHP的Autoloading有助于解决并包含正确的文件。
答案 1 :(得分:2)
它基于您的应用程序已经通过类文件中的namespace
声明提供给PHP的信息 - 通常是通过自动加载器。默认情况下,找不到您的课程。
可能是:
除非它是一个小项目,否则第一个选项将很快变得无法管理,因此您最好不要探索第二个选项。正如@Koala Yeung所说,PSR-0和PSR-4是普遍接受的方式。
您使用spl_autoload_register
(http://php.net/manual/en/function.spl-autoload-register.php)注册自动加载器,这样您就可以编写每次创建新对象时调用的函数。
如果您运行var_dump(spl_autoload_functions());
,您将看到Laravel已设置的自动加载器。