Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codeigniter 为什么需要通过Laravel中的composer手动注册类?_Codeigniter_Laravel_Controller_Composer Php - Fatal编程技术网

Codeigniter 为什么需要通过Laravel中的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

我来自CodeIgniter的背景,每次我创建一个新的控制器时,我不必通过调用类似composer的程序来注册它


为什么在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。