PHP + Composer:将文件添加到autload_static.php以加载包

时间:2016-07-03 08:28:05

标签: php composer-php

我在通过composer加载我需要的包时遇到了问题 DamageEvent

PHP(composer require package)表示它没有认识到这个包。

在查看脚本时,我在version 5.6这些行中找到了:

autoload_real.php

我的软件包列在$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION'); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; call_user_func(\Composer\Autoload\ComposerStaticInitb5ab90658915f56241dbbea020198264::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; echo "<br>"; var_dump($map); foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { $loader->addClassMap($classMap); } } 文件中,并在packages数组中返回,但代码进入if子句($ useStaticLoader为true),而autoload_psr4.php我的软件包不是上市。

autoload_static.php设置为false时,else子句按预期加载我的包。

我要补充一点,我安装的软件包将自己声明为$useStaticLoader软件包。

静态标志的含义是什么?如何将我的包列在psr4数组中?

1 个答案:

答案 0 :(得分:1)

<强> Allow optionally disabling the static autoloader

  

静态自动加载器在环境中存在问题   预PHP   5.6语法兼容性是必需的。许多项目都具有自动化CI,可以在存储库中的所有文件中运行linter来防止   开发人员意外地引入了不兼容的语法。而且   静态自动加载器可以在较低的PHP版本上正确保护自己   仍然会绊倒。鉴于提交的错误数量,   它似乎是一种常见设置:#5255#5316#5324#5407

     

这会在dump-autoload命令中添加一个--no-static选项   将autoload_real.php更新为禁用静态自动加载器   不查找文件,并删除autoload_static.php(如果存在)。

此外,您可以使用--optimize-autoloader SELECT p.*, 1 as enabled FROM member_permissions mp JOIN permissions p ON p.permission_id = mp.permission_id WHERE member_id = 1 UNION SELECT pgp.*, 1 as enabled FROM member_permissions mp JOIN permission_link pl ON pl.permission_group_id = mp.permission_group_id JOIN permissions pgp ON pgp.permission_id = pl.permission_id WHERE member_id = 1 UNION SELECT *, 0 as enabled FROM permissions p where p.permission_id not in ( SELECT p.permission_id FROM member_permissions mp JOIN permissions p ON p.permission_id = mp.permission_id WHERE member_id = 1 UNION ALL SELECT pgp.permission_id FROM member_permissions mp JOIN permission_link pl ON pl.permission_group_id = mp.permission_group_id JOIN permissions pgp ON pgp.permission_id = pl.permission_id WHERE member_id = 1 ) 标记来避免这种情况。

P.S。:我也遇到了与php 5.6相同的问题,检查你的路径和命名空间两次!