添加新文件时,编辑器的类映射自动加载删除现有映射



我正在处理一个Laravel 5项目,当向现有的PHP项目添加新的类文件时,无法检测到以前生成的类映射和/或未检测到几个新类文件。

环境没有全局composer.json,但这是本地包composer.json:

{
"name": "laravel/laravel",
"type": "project",
"keywords": [
"framework",
"laravel"
],
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"autoload": {
"classmap": [            
"database/seeds"
]
}
}

每次尝试都运行composer dump-autoload。这并没有解决添加新类,甚至保留现有类映射的问题。

我已经通过向项目中添加包含新类和/或空白文件的文件来测试这个问题,在所有情况下,只有现有类映射的一个子集被重新生成,在新类文件的情况下,一些新文件被包括在生成的类映射中。

示例文件(现有(:AccessTypeSeeder.php

<?php
use IlluminateDatabaseSeeder;
use IlluminateSupportFacadesDB;
use CarbonCarbon;
class AccessTypeSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('site_managements')->insert(
[
[
'meta_key' => 'access_type',
'meta_value' => 'all',
'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
'updated_at' => Carbon::now()->format('Y-m-d H:i:s'),
],
]
);
}
}

删除新文件并重新运行dump-autoload通常会恢复现有的类映射,即使文件本身是空白的。克隆(复制和粘贴(像上面这样的现有文件,并将类和文件名重命名为唯一的名称,如TestSeederTestSeeder.php,并没有什么区别。

如上所述,现有类不包含在任何命名空间中,并且试图通过PSR-0配置自动加载,奇怪的是,即使没有定义基于类映射的自动加载,仍然会在autoload_classmap.php文件中生成一些类映射(通常为1或2(:

{
"name": "laravel/laravel",
"type": "project",
"keywords": [
"framework",
"laravel"
],
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"autoload": {
"psr-0": {
"":["database/seeds"]
}
}
}

注意:该项目使用docker容器,composer(v1+/v2(通过单独的图像和容器应用于源文件。如果可能的话,最好使用原始的基于类映射的解决方案来实现这一点,即使它不如优选的PSR-0或PSR-4配置理想。

我在SO上查看了类似的composer自动加载问题,但问题原因不相同,建议的解决方案不适用于此is或不起作用。

此问题似乎是Docker容器中的安装环境造成的。在容器外运行composer脚本可以创建完整的映射。

最新更新