我正在使用带有自定义文件加载程序的自动加载功能。 我有一个问题,因为我的加载程序依赖于供应商提供的某些类。 但是作曲家需要我的加载程序先于供应商加载程序。
这是生成的autoloader.php
:
<?php
// autoload.php generated by Composer
if (!class_exists('Composer\\Autoload\\ClassLoader', false)) {
require __DIR__ . '/composer' . '/ClassLoader.php';
}
return call_user_func(function() {
$loader = new \Composer\Autoload\ClassLoader();
$composerDir = __DIR__ . '/composer';
$map = require $composerDir . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->add($namespace, $path);
}
$classMap = require $composerDir . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
$loader->register();
require $baseDir . '/Nella/loader.php'; // <-- my libs
require $vendorDir . '/nette/nette/Nette/loader.php'; // <-- vendor libs
return $loader;
});
我需要在库(_Nella_)之前加载_Nette_,因为(_Nella_)加载器需要_Nette_中的某些类。
@Seldaek我想这里的顺序应该遵循解析依赖项时发现的顺序,以便依赖项的自动加载文件在依赖于该文件的软件包文件之前加载。
是的,这很有道理,虽然在第一次运行之后我不确定是多么随机,但不确定实现起来有多么容易。
我不完全确定我明白了吗? 将需要所有自动装带器,然后顺序应该没关系吗?
编辑:没关系,我明白了:)
求解程序应该已经在事务中以正确的顺序返回了这些,包括已经安装软件包的情况,因此不确定为什么顺序不正确。
这是我的_composer.json_ https://github.com/nella/framework/blob/composer/composer.json
我刚刚遇到了kdyby/forms-replicator
的相同问题
{
"name":"kdyby/forms-replicator",
"require":{
"php":">=5.3.2",
"nette/nette":"*"
},
"autoload":{
"files":["Replicator.php"]
}
}
顺序require
的autoload_real.php
应与包装如何需要对方。
合并@HosipLan的修复程序。
如何标记应该首先加载我们的库?
我的意思是,它不依赖于其他对象,但是应该先加载它,然后再加载其他东西。
我作为@onlyongunz同样的问题-我已经在全球安装了apigen/apigen
和symfony/var-dumper
,但是当我使用dump()
从版本tracy/tracy
(由ApiGen要求)叫做。 我想使用VarDumper的版本。
好吧,我认为我将以load_first
作为优先级,以便在不依赖其他库的情况下优先加载该包(除非它是php或其他),然后添加--ignore-order
来忽略load_first
。
最有用的评论
能够定义顺序会很好。 甚至更好:有一个额外的选项来定义需要首先加载的文件。
用例:考虑到具体定义的laravel辅助函数,尝试覆盖它们,但是无法告诉作曲家我的定义必须在laravel的本机函数之前。
内容: https :
解决方法: https :