我正在为WordPress开发一个特定的PHP框架,我想让我的用户选择使用composer将其作为一个包安装,或者手动安装它。如果使用了composer,那么psr-4
类自动加载器会处理所有内容。如果没有,则必须在框架的引导过程中手动加载所有文件。
有没有一种安全的方法来检查作曲家的自动加载器是否在给定的WordPress环境中使用?
目前我正在使用:
if( !class_exists('Composer\\Autoload\\ClassLoader') )
{
// Manually include files if composer is not used.
require_once 'some/files.php';
}
但是,如果在给定的WordPress环境中有一个内部使用composer的插件,那么上面的if语句将返回true
,即使其他插件无法访问它。
答案 0 :(得分:1)
事实证明,解决方案非常简单。您需要创建2个不同的引导文件,例如manual-bootstrap.php
和composer-bootstrap.php
。然后将以下行添加到composer.json
:
"autoload": {
"files": ["composer-bootstrap.php"]
}
只有在使用composer将框架作为依赖项加载时,才会调用 composer-bootstrap.php
。想要手动加载框架的用户将改为使用manual-bootstrap.php
。
答案 1 :(得分:1)
if(class_exists("\Composer\Autoload\ClassLoader"))
{
// a composer autoload.php has already been included/required
}