检查Laravel项目中是否存在供应商的最佳方法是什么?
$foo = 'Foo\Foo';
if (class_exists($foo)) {
// class exists
}
有更好的解决方案吗?我不知道的Laravel方法?
谢谢!
答案 0 :(得分:1)
这是正确的做法,Laravel没有这方面的功能。
但最正确的方法是使用完整命名空间检查类的存在,如:
$foo = 'Symfony\Component\HttpFoundation\Request';
if (class_exists($foo)) {
// class exists
}
答案 1 :(得分:0)
我并不认为这是一种真正最好的方式 - 也就是说,我知道它没有很好的API。
但是,使用非Laravel方法,您可以检查Composer installed.json
文件(我过去所做的,位于vendor/composer/installed.json
),或者,如您所说,检查类存在检测。
使用Laravel方式,如果您知道第三方库特别是具有服务提供商的Laravel库或在IoC容器中注册的东西,您可以在那里查看 - 或者查看配置(' app。提供商')查看它是否包含您期望的服务提供者类,或查看app('the.binding.name')
是否返回您期望的内容(或者使用$app->bound('the.binding.name')
)。
更好的是,如果它是驱动程序,例如数据库引擎,您可以查询数据库管理器以查看驱动程序是否已注册。这可能是您最好的方式,但更确切地说取决于您想要检测的第三方库。
答案 2 :(得分:0)
我认为你应该像使用app容器一样以laravel的方式尝试:
try {
app($foo);
} catch (\ReflectionException $e) {
// here you know that class dosen't exists
}