Laravel 5.2.x测试(如果存在供应商)


Laravel 5.2.x test if vendor exists

检查我们的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
}