Codeigniter 为什么需要通过Laravel中的composer手动注册类?
我来自CodeIgniter的背景,每次我创建一个新的控制器时,我不必通过调用类似composer的程序来注册它Codeigniter 为什么需要通过Laravel中的composer手动注册类?,codeigniter,laravel,controller,composer-php,Codeigniter,Laravel,Controller,Composer Php,我来自CodeIgniter的背景,每次我创建一个新的控制器时,我不必通过调用类似composer的程序来注册它 为什么在Laravel中需要这样做?这是因为Laravel在Composer中使用“类映射”自动加载模式。这样,它将扫描指定的目录并编译一个类映射。因此,在添加新类时,需要运行composer dump autoload,以便它可以更新已编译的类映射 然而,使用PSR-4自动加载Laravel是相当容易的。此自动加载标准要求您在使用类名和文件名时遵循更严格的名称空间规则 要使用PSR
为什么在Laravel中需要这样做?这是因为Laravel在Composer中使用“类映射”自动加载模式。这样,它将扫描指定的目录并编译一个类映射。因此,在添加新类时,需要运行
composer dump autoload
,以便它可以更新已编译的类映射
然而,使用PSR-4自动加载Laravel是相当容易的。此自动加载标准要求您在使用类名和文件名时遵循更严格的名称空间规则
要使用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 {
...
您不需要手动注册控制器,当您echo app_path()
时会说什么?问题是错误的。重新措辞或修改假设并删除问题;)@JarekTkaczyk怎么了?@dave您不需要注册任何控制器。同样,请重新表述这个问题,并告诉我们您到底遇到了什么问题。回答得好,这让我很恼火,因为它鼓励我的开发人员在项目中使用classmap方法,作为他们对自动加载的第一个介绍。这么多额外的烦人的工作!希望他们能很快将Laravel的默认安装转换为完全psr4。