我来自CodeIgniter背景,每当我创建一个新控制器时,我都不必通过调用像composer这样的程序来注册它。
为什么Laravel需要这个?
答案 0 :(得分:2)
这是因为Laravel使用" Classmap" Composer中的自动加载模式。这样,它扫描指定的目录并编译类映射。因此,您需要在添加新类时运行composer dump-autoload
,以便它可以更新已编译的类映射。
但是,使用Laravel进行PSR-4自动加载相当容易。此自动加载标准要求您遵循更严格的命名空间规则以及您的类名和文件名。
要使用PSR-4,您需要命名控制器,模型等,如下所示:
Yourname\Yourproject\Controllers
Yourname\Yourprject\Models
等。您还需要更改要大写的控制器,模型等目录 - 控制器,模型等,以匹配命名空间。然后,将其添加到composer.json文件中:
"autoload": {
"psr-4": {
"Yourname\\Yourproject\\": "project_dir/app/"
}
}
这会将Yourname\Yourproject
命名空间映射到app目录。因此,例如,要查找类Yourname\Yourproject\Controllers\FooController
,Composer将自动知道查看app/Controllers/FooController.php
。在FooController.php
的顶部,写下
<?php
namespace Yourname\Yourproject\Controllers
class FooController extends \Controller {
...
(注意:不需要使用Yourname\Yourproject\
对所有内容进行命名空间;建议使用它,但简单的Yourproject\
也可以。
你仍然可以为你的composer.json添加一个autoload.classmap部分,用于不遵循PSR-4的课程,但你需要为他们运行composer dump-autoload
。
有关Composer中各种自动加载模式的更多信息,请see here.