Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Привет всем. Есть небольшой магазинчик на ларавель, доставку осуществляют несколько курьеров, планирую в консоле сделать команду которая будет при запуске по крону отправлять какому то курьеру, по логике скрипта, через API.
Проблема:
Под каждого курьера надо написать свой класс сопряжения с их API. Куда лучше и грамотнее выносить такие классы. В данном случае должно быть их три. Это в папку vendor или как лучше сделать, именно архитектурно. И как потом это внедрить именно в ларавель, где то надо же их зарегистрировать чтоб использовать.
Можно какие то примеры пожалуйста? Ну или ссылку на оные.
Спасибо за ответы!
Не в сети
Тебе нужно почитать про Сервис контейнеры и Сервис провайдеры. Некий провайдер у тебя должен выдавать нужный тебе сервис АПИ.
Не в сети
Ок, спасибо посмотрел тонну уроков на ютуюбе.
Поправьте если я верно понял как мне нужно сделать.
Нужно создать три сервиса для каждого из курьеров которые будут доставлять товар.
Связать их одним сервис провайдером:
public function register(){
$this->app->bind('curier_1','App\Servises\curier_1');
$this->app->bind('curier_2','App\Servises\curier_2');
$this->app->bind('curier_3','App\Servises\curier_3');
}
Далее нужно создать один фасад, под этого одного сервис провайдера?
Ну я предполагаю что фасад нужен для того чтобы можно было вызывать статические методы для созданных объектов, однотипных классов.
Ну например:
Курьеров у нас ТРИ, функционал у них всех одинаковый взаимодействия, только начинка разная. Значит мы можем сделать один фасад под все три класса? Поправьте пожалуйста, совсем запутался.
И еще как мне сделать так, чтоб при запросе bootstrap данный сервис провайдер не включался при каждом его выхове, так как он мне нужен только при запуске консольной одной команды.
Спасибо за ответы!
Изменено Normand (27.09.2018 22:26:21)
Не в сети
Не совсем понятно что подразумевается под функционалом и начинкой, но если функционал одинаковый для всех, то вынести его в один класс и инициализировать его с определенной начинкой для каждого, посмотрите шаблон "Инверсия зависимостей" или может Абстрактная фабрика будет уместна в вашем случае.
Не в сети
Может я не совсем понял суть проблемы, но почему бы вам не сделать в каждом сервисе метод, например send(), который будет отправлять данные соответствующему курьеру, и в кроне просто вызывать его в каждом сервисе?
Не в сети
Возможно тут будет уместно вообще не использовать ни фасады, ни фабрики. Просто в app создать нужную папку с нужным классом. У меня, например, есть папка Helpers, где хранятся классы со статическими методами. И использовать их просто без DI и прочего.
use App\Helpers\ClassName;
ClassName::methodName();
Или может я просто не понял что вы хотели сделать.
Не в сети
Страницы 1