我在通过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
数组中?
答案 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相同的问题,检查你的路径和命名空间两次!