Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
А должен ли OrderService::create() знать, что такое Request?
По-моему, суть контроллера получить запрос, вынуть из него параметры, и эти параметры уже передать в сервис, а ответ сервиса преобразовать в абстракцию http ответа и вернуть её.
Сервис же может использоваться и в консольной команде.
Да там в примерах кода вообще лютая путаница…
Я, когда писал комментарий, апеллировал к этому фрагменту:
public class OrderService { public function create(Request $request) { // Создание заказа // Резервирование товаров $sms = new RuSms(); // Устанавливаем номер и текст сообщения и уникальный идентификатор приложения $sms->send($number, $text, $appId); } }
$this->service->create($request->all());
public class OrderService
{
public function create(Request $request)
{
// Создание заказа
// Резервирование товаров
$sms = new RuSms();
// Устанавливаем номер и текст сообщения и уникальный идентификатор приложения
$sms->send($number, $text, $appId);
}
}
public function create(): void
{
// Создание заказа
// Резервирование товаров
$this->sms->send($nubmer, $text);
}Нормально так интерфейс наследовали, поправить бы надо пример
class OrderController extends Controller
{
protected $service;
public function __construct(OrderService $service)
{
$this->service = $service;
}
public function create(OrderRequest $request)
{
// Не боитесь коллизий параметров?
// Например, product_id может оказаться и в GET, и в POST.
// Какое значение вернёт метод $request->all()?
// Это точно будет то значение, которое нужно?
// Используйте лучше $request->query() или $request->post()
$this->service->create($request->all());
// Что за $order, откуда он берётся? Наверное его возвращает сервис,
// но интерпретатор не настолько сообразителен.
return response()->json($order, 201);
}
}Передевать Request в сервис это то еще нарушение SRP (Как ж его использовать из консоли? :) )
Request::create()
Принцип Единой Ответственности (SRP) на примере Laravel