Автор оригинала: David Wong.
Представил
Поставщик услуг Laravel является ядром платформы, обеспечивая маршрутизацию, ведение журнала, кэширование и другие функции. Здесь требуется использовать сторонние API для получения погодных условий, включая поставщиков услуг, контракты, внедрение зависимостей и так далее. Соответствующую информацию можно найти в следующих ресурсах. Эта статья не будет расширена. Код можно просмотреть на GitHub.
Создайте поставщика услуг
- иметь доступ к
ремесленникуБыстрое создание поставщиков услуг, внедрениеphpремесленное производство:поставщик Услуг по погодеТо есть вприложении/ПровайдерахСоздано в каталогеWeatherServiceProvider.php - Документы;
останьсяconfig/app.phpЗарегистрируйте поставщиков услуг в ____________поставщикиПоставщик услуг, который будет создан в массивеПриложение\Провайдеры\Поставщик погодных услуг::класс,
Создайте контракт
- оставайся
приложениеНовое в каталогеКонтрактыКаталог используется для хранения контрактных документов. - оставайтесь
приложение/КонтрактыСоздайте контракт в каталоге, то естьWeather.phpФайл интерфейса. Определено только в интерфейсеобщедоступная функция getWeather($CityName);Для получения информации о погоде используется метод.
Реализация контракта
- оставайтесь
приложениеНовое в каталогеСервис/ПогодаКаталоги используются для реализации хранилищаWeather.phpДокументы договоров; - Выберите сторонний API погоды для реализации контракта. Погода известна наизусть. Для вызовов API вы можете просмотреть документацию.
- Окончательный созданный файл
app/Service/Weather/Xinzhi.php。 УнаследованоWeather.phpФайлы интерфейса, все реализованыполучить прогноз погодыМетод, код можно просмотреть на GitHub; - Вот ручка-предзнаменование. За исключением вышеуказанного
Xinzhi.phpКроме того, контракт выполняется при выборе ветреной погоды. Этот документ являетсяapp/Service/Weather/Hefeng.php。 Просмотр кода на GitHub;
Привязка Поставщика Услуг
Мы выполнили контракт, а затем привязываем конкретный класс реализации. Вернитесь к поставщику услуг, которого вы начали создавать, в регистрация Добавьте в метод следующий код
$this->app->bind('App\Contracts\Weather', function() {
return new Xinzhi();
});Наконец, его можно использовать нормально. Создайте новый маршрут и протестируйте его. Попробуйте позвонить через инъекцию зависимостей
public function getWeather(Request $request, Weather $weather)
{
return $weather->getWeather($request->input('city', 'beijing'));
}Без проблем
развязка
Выполнив все вышеперечисленные шаги, это требование было выполнено. Это кажется очень хлопотным, не так ли? Вы можете инкапсулировать функцию и вызвать ее напрямую. Нет необходимости настраивать поставщика услуг и создавать контракт. На самом деле, одна из целей описания шагов состоит в том, чтобы дать подзаголовок двум словам. —— развязка 。 Предположим, что нам нужно использовать эту функцию в большом количестве кода, и вдруг в один прекрасный день API зависает. Что нам следует делать? Осмотритесь, проверьте код, а затем измените его. В то же время обратите внимание на параметры, возвращаемые значения и так далее. Это просто звучит раздражающе. На этом этапе, если наш код будет разработан в соответствии с описанными выше шагами, решение будет совсем другим. Короче говоря, Одна строка кода Ты можешь это сделать. Помните о пере-предзнаменовании выше, есть два экземпляра для реализации интерфейса. Настройка поставщика услуг регистрация Внесите следующие изменения
$this->app->bind('App\Contracts\Weather', function() {
// return new Xinzhi();
return new Hefeng();
});Изменена привязка контракта, все используемые Погода Примеры внедрения зависимостей, напротив, являются Xinzhi.php Переключение экземпляра в Hefeng.php Пример.
Контракты, конечно, делают больше, чем просто разъединяют. Код проще для понимания, проще в обслуживании и даже может использоваться в качестве краткого документа для разработки. Для более глубокого понимания, пожалуйста, обратитесь к следующим ресурсам.
Список литературы: Основополагающие принципы – Поставщики услуг, Основополагающие принципы – Контракты, Пример контейнера услуг Laravel Учебное пособие – Глубокое понимание инверсии управления (IoC) и внедрения зависимостей (DI), Внедрение зависимостей Laravel из серии “Ученичество ремесленнику”.
Оригинал: “https://developpaper.com/laravel-custom-service-provider/”