检查我们的Laravel项目中是否存在供应商的最佳方法是什么?
我的解决方案:
$foo = 'Foo'Foo';
if (class_exists($foo)) {
// class exists
}
有更好的解决方案吗?一个我不知道的拉拉威尔方法?
谢谢!
这是正确的做法,Laravel中没有相应的函数。
但最正确的方法是使用完整的名称空间检查类的存在,比如:
$foo = 'Symfony'Component'HttpFoundation'Request';
if (class_exists($foo)) {
// class exists
}
我真的不认为有真正最好的方法——也就是说,据我所知,没有很好的API。
然而,使用非Laravel方法,您可以检查Composer installed.json
文件(我过去曾这样做过,位于vendor/composer/installed.json
),或者,正如您所说,检查类存在检测。
使用Laravel方法,如果您知道第三方库是一个特定的带有服务提供商的Laravel库,或者以其他方式在IoC容器中注册了一些东西,您可以在那里进行检查-查看config("app.provitors"),看看它是否包含您期望的服务提供商类,或者看看app('the.binding.name')
是否返回您期望的东西(或者可能使用$app->bound('the.binding.name')
)。
更好的是,如果它是一个驱动程序,例如一个DB引擎,您可以查询DB管理器来查看驱动程序是否已注册。这可能是你最好的方法,但这取决于你想要检测的第三方库。
我认为你应该用laravel的方式使用这样的应用程序容器:
try {
app($foo);
} catch ('ReflectionException $e) {
// here you know that class dosen't exists
}