【问题标题】:Laravel 5.2.x test if vendor existsLaravel 5.2.x 测试供应商是否存在
【发布时间】:2016-08-29 16:41:44
【问题描述】:

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

我的解决方案:

$foo = 'Foo\Foo';

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

有没有更好的解决方案?一个我不知道的 Laravel 方法?

谢谢!

【问题讨论】:

    标签: php laravel laravel-5.2 exists vendor


    【解决方案1】:

    这是正确的做法,在 Laravel 中没有这样的功能。

    但最正确的方法是使用完整的命名空间检查类的存在,例如:

    $foo = 'Symfony\Component\HttpFoundation\Request';
    if (class_exists($foo)) {
        // class exists
    }
    

    【讨论】:

      【解决方案2】:

      我真的不认为有一个真正最好的方法 - 也就是说,我所知道的没有很好的 API。

      但是,使用非 Laravel 方式,您可以检查 Composer installed.json 文件(我过去做过,位于 vendor/composer/installed.json),或者如您所说,类存在检测。

      使用 Laravel 方式,如果您知道第 3 方库是具有服务提供者的 Laravel 库,或者在 IoC 容器中注册了某些内容,您可以在那里查看 - 查看 config('app.providers')看看它是否包含你期望的服务提供者类,或者看看app('the.binding.name') 是否返回你期望的东西(或者使用$app->bound('the.binding.name') 可能)。

      更好的是,如果它是驱动程序,例如数据库引擎,您可以查询数据库管理器以查看驱动程序是否已注册。这可能是您最好的方法,但更取决于您要检测的第 3 方库。

      【讨论】:

        【解决方案3】:

        我认为你应该像这样使用应用容器以 laravel 的方式尝试它:

        try {
            app($foo);
        } catch (\ReflectionException $e) {
            // here you know that class dosen't exists
        }
        

        【讨论】:

          猜你喜欢
          • 2016-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-02
          • 2014-01-10
          • 1970-01-01
          相关资源
          最近更新 更多