Php Composer在每次不运行命令的情况下自动加载文件
这是我出于好奇而提出的一个一般性问题,可能会在我的项目中产生一些有用的东西 每次我添加一个新文件,例如一个新的控制器或模型,我都必须运行composer dump autoload-o,以便它包含该文件,但不确定我是否只是做错了什么,或者它是如何工作的 在我创建了包含其内容的文件后,是否可以让composer自动查看该文件 我的第一个想法是创建一个脚本,在一个特殊的刷新文件中运行命令,但这似乎是一种浪费 我正在使用PSR-4加载我的文件 composer.json自动加载:Php Composer在每次不运行命令的情况下自动加载文件,php,composer-php,Php,Composer Php,这是我出于好奇而提出的一个一般性问题,可能会在我的项目中产生一些有用的东西 每次我添加一个新文件,例如一个新的控制器或模型,我都必须运行composer dump autoload-o,以便它包含该文件,但不确定我是否只是做错了什么,或者它是如何工作的 在我创建了包含其内容的文件后,是否可以让composer自动查看该文件 我的第一个想法是创建一个脚本,在一个特殊的刷新文件中运行命令,但这似乎是一种浪费 我正在使用PSR-4加载我的文件 composer.json自动加载: "autol
"autoload":{
"psr-4":{
"Website\\":"app"
}
},
基本上,Composer不知道您正在创建的文件,您必须运行dump autoload命令,该命令不会下载任何新文件。它只是重新生成需要包含在项目autoload_classmap.php中的所有类的列表。非常适合在项目中有新类时使用
理想情况下,我们执行composer dump autoload-o,以便更快地加载您的网页。它不是默认值的唯一原因是,它需要更长的时间生成,但只是稍微明显一点您需要配置composer.json文件,以便自动加载程序知道在何处查找特定名称空间:
"autoload": {
"psr-4": {
"App\\": "src/"
},
"files": [
"src/simpleFunctions.php"
]
}
运行composer update后,当脚本遇到自动属于这些定义的命名空间时,自动加载程序将知道在何处查找,而无需编写任何进一步的命令
在命名和创建类时,必须尊重文件层次结构和psr-4。在上面的示例中,添加App\Controller\MyController类非常简单,您可以将其添加到Controller文件夹中,并在下次运行时自动加载
/src
/Controller
MyController.php
/Model
/Mappers
MyMapper.php
simpleFunctions.php
外壳很重要
当看到类似Website\Controllers的名称空间时,自动加载程序将在指定名称空间的根目录下查找具有相同大小写的文件。这意味着,如果您使用的是像Linux发行版这样的区分大小写的系统,那么您实际上需要尊重大小写。在您的情况下,类Website\Controllers\Front必须位于app/Website/Controllers/Front.php中。可能我读错了,但您希望composer在不告诉composer的情况下从存储库中拾取新文件?似乎您的composer自动加载部分配置不正确。请把它贴在这里,这样我们就可以看到了。这完全不是预期的方式,如果您确实将psr-4应用于您的名称空间,遵循一致的文件层次结构并正确设置composer,则在添加新类时没有要运行的命令。@ʰᵈˑ不,不是从我的回购协议,只是本地文件系统,我知道如果我将其部署到另一个系统上,我需要这样做。使用他们的app_dev.php环境处理此问题。我相信其他框架也可以。为什么否定请给出理由我不想下载repo,而是使用composer加载所有网站文件,它确实。。。只是不加载我为新控制器或模型创建的新文件。请参阅我在顶部包含的composer.json autoload,但它不会加载。您还必须尊重文件层次结构和名称空间。Website\Class必须在app/Class.php文件中。我有,我有,我的文件在/app/Website/controllers中,每个文件都有名称空间Website/controllers。上限可能是冲突吗?是的,大写字母确实很重要。有些操作系统是不区分大小写的,但要确保您必须尊重大小写。如您所见,在我的示例中的文件层次结构中,文件夹使用大写字母。这不是巧合。我会尝试一下,看看是否能解决它。
namespace App\Controller;
class MyController {}