Какой лучший способ проверить, существует ли поставщик в нашем проекте 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.providers’), чтобы увидеть, он содержит ожидаемый класс поставщика услуг или app('the.binding.name')
возвращает то, что вы ожидаете (или используете $app->bound('the.binding.name')
может быть).
Еще лучше, если это драйвер, например механизм БД, вы можете запросить менеджер БД, чтобы узнать, зарегистрирован ли драйвер. Вероятно, это ваш лучший способ, но он зависит от сторонней библиотеки, которую вы хотите обнаружить.
Я думаю, что вы должны попробовать это способом laravel, используя контейнер приложения следующим образом:
try {
app($foo);
} catch (\ReflectionException $e) {
// here you know that class dosen't exists
}