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

时间:2016-05-04 09:59:34

标签: php laravel laravel-5.2 exists vendor

检查Laravel项目中是否存在供应商的最佳方法是什么?

我的解决方案:

$foo = 'Foo\Foo';

if (class_exists($foo)) {  
    // class exists
}

有更好的解决方案吗?我不知道的Laravel方法?

谢谢!

3 个答案:

答案 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
}