Рубрики
Uncategorized

Поставщик пользовательских услуг Laravel

Автор оригинала: David Wong.

Представил

Поставщик услуг Laravel является ядром платформы, обеспечивая маршрутизацию, ведение журнала, кэширование и другие функции. Здесь требуется использовать сторонние API для получения погодных условий, включая поставщиков услуг, контракты, внедрение зависимостей и так далее. Соответствующую информацию можно найти в следующих ресурсах. Эта статья не будет расширена. Код можно просмотреть на GitHub.

Создайте поставщика услуг

  1. иметь доступ к ремесленнику Быстрое создание поставщиков услуг, внедрение php ремесленное производство:поставщик Услуг по погоде То есть в приложении/Провайдерах Создано в каталоге WeatherServiceProvider.php
  2. Документы; останься config/app.php Зарегистрируйте поставщиков услуг в ____________ поставщики Поставщик услуг, который будет создан в массиве Приложение\Провайдеры\Поставщик погодных услуг::класс,

Создайте контракт

  1. оставайся приложение Новое в каталоге Контракты Каталог используется для хранения контрактных документов.
  2. оставайтесь приложение/Контракты Создайте контракт в каталоге, то есть Weather.php Файл интерфейса. Определено только в интерфейсе общедоступная функция getWeather($CityName); Для получения информации о погоде используется метод.

Реализация контракта

  1. оставайтесь приложение Новое в каталоге Сервис/Погода Каталоги используются для реализации хранилища Weather.php Документы договоров;
  2. Выберите сторонний API погоды для реализации контракта. Погода известна наизусть. Для вызовов API вы можете просмотреть документацию.
  3. Окончательный созданный файл app/Service/Weather/Xinzhi.php 。 Унаследовано Weather.php Файлы интерфейса, все реализованы получить прогноз погоды Метод, код можно просмотреть на GitHub;
  4. Вот ручка-предзнаменование. За исключением вышеуказанного 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/”