Size: a a a

2020 May 20

V

Vadim in Laravel Pro
interface Method
{
    public function httpMethod(): string;
    public function payload(): array;
    public function endpoint(): string;
}

final class GoogleMethod implements Method {//}
final class YandexMethod implements Method {//}

final class ApiClient
{
    public function do(Method $method)
    {
         $response = $this->httpClient->request($method->httpMethod(), $method->endpoint(), ['form_params' => $method->endpoint()]);
    }
}
источник

MR

Maksat Ramazan in Laravel Pro
спасибо за помощь
источник

V

Vadim in Laravel Pro
Можно еще в Method добавить метод map(ResponseInterface): Type, который вернет дтошку и куда ты передашь ResponseInterface от газзла или что там у тебя.
источник

MR

Maksat Ramazan in Laravel Pro
спасибо
источник

КГ

Кирилл Голубев... in Laravel Pro
всем привет, а можно ведь в web у экшен указать не строкой с путём а прям сам класс и его метод?
источник

V

Vadim in Laravel Pro
[Controller::class, 'method']
источник

EG

Egor Gruzdev in Laravel Pro
Vadim
[Controller::class, 'method']
будет ошибка если метод не окажется статическим
источник

V

Vadim in Laravel Pro
Egor Gruzdev
будет ошибка если метод не окажется статическим
Мы об одном и том же: Route::get('/', [Controller::class, 'method'])?
источник

EG

Egor Gruzdev in Laravel Pro
Vadim
Мы об одном и том же: Route::get('/', [Controller::class, 'method'])?
да
источник

V

Vadim in Laravel Pro
И с чего вдруг тут будет ошибка?
источник

AB

Andrey Bogdanov in Laravel Pro
Maksat Ramazan
подскажите какой можно паттерн использовать чтобы код не дублировался, имею много вызовов к апи, где меняются параметры запроса, заголовки, эндпоинты. контроллер просто разросся, как можно избавиться от дубля
впринципе фабрику можно юзать, под каждое апи свой класс с одним общим интерфейсом
https://refactoring.guru/ru/design-patterns/factory-method
источник

А

Антон in Laravel Pro
Egor Gruzdev
будет ошибка если метод не окажется статическим
Не будет, это валидный callable
источник

EG

Egor Gruzdev in Laravel Pro
Антон
Не будет, это валидный callable
сек. сейчас проверю, но до 6.0 контейнер такие записи пытался вызвать как Controller::method, а не (new Controller())->method()
источник

V

Vadim in Laravel Pro
Egor Gruzdev
сек. сейчас проверю, но до 6.0 контейнер такие записи пытался вызвать как Controller::method, а не (new Controller())->method()
У меня 5.8, всегда использую именно так, а не строкой
источник

EG

Egor Gruzdev in Laravel Pro
Vadim
У меня 5.8, всегда использую именно так, а не строкой
супер, действительно работает (тестил а 7.x), а самое главное автокомлит в IDE работает
источник

MR

Maksat Ramazan in Laravel Pro
имеешь ввиду собирать обьект запроса?
просто мне кажется в этом случае кода еще больше будет хоть и отвяжемся от жесткой привязки
источник

MR

Maksat Ramazan in Laravel Pro
там вызовов апи 30 не меньше
источник

AB

Andrey Bogdanov in Laravel Pro
Имеет смысл разбить на несколько сервисов или на какие-то логические части, если в одном сервисе кажется, что будет много кода. Я имел ввиду, если у тебя в контроллере вызовы к разным апи, но одинаковая логика, то под каждый эндпоинт имеет смысл сделать свой сервис, например ApiGoogleService, ApiYandexService, с общим интерфейсом, который содержит описание методов и заимплеменить твои сервисы через этот интерфейс
источник

S

Sergo in Laravel Pro
Egor Gruzdev
супер, действительно работает (тестил а 7.x), а самое главное автокомлит в IDE работает
На этом моменте в чат должен влететь @Adelf32 с рекламой плагина для автокомплита)
источник

EG

Egor Gruzdev in Laravel Pro
Sergo
На этом моменте в чат должен влететь @Adelf32 с рекламой плагина для автокомплита)
в 5.5 не работает, надо глянуть с какого момента добавили
источник