Size: a a a

Laravel для начинающих

2020 February 18

DM

Dmitry M in Laravel для начинающих
Такой вопрос, при использовании сервисного слоя где расположить классы, которые используются сервисом? Например: в системе есть заказы, что-бы заказ был оформлен автоматически он должен соответствовать определённым требованиям (правилам). Предположим у нас есть сервис OrderService в котором есть метод attemptAutoCheckout() (попытка автоматического оформления, собственно метод, который будет проверять заказ и в случае успеха - оформлять). Но тут фигурирует не только сервис, а ещё класс OrderValidator который осуществляет проверку по определённым правилам, реализующим интерфейс RuleInterface .

Получается, что в контроллере мы вызываем

$this->orderService->attemptAutoCheckout($order);

а уже внутри этого метода у нас:

$this->orderValidator->addRule(new FooRule());
$this->orderValidator->addRule(new BarRule());

if (! $this->orderValidator->validate($order)) {
 $errors = $this->orderValidator->getErrorMessages();
}

Вопрос, куда разместить OrderValidator , RuleInterface , FooRule , BarRule ? Если просто закинуть рядом с OrderService в директорию Services/ то непонятно что к чему относится (а ведь OrderValidator как бы логически связан именно с OrderService ), в отдельную директорию вынести? Или что? Как бы вы поступили?
источник

VY

Vladimir Yefremov in Laravel для начинающих
О!

900 участников!

Та-даааам!
источник

D

DK in Laravel для начинающих
Vladimir Yefremov
О!

900 участников!

Та-даааам!
цифры не показатель)
источник

VY

Vladimir Yefremov in Laravel для начинающих
DK
цифры не показатель)
А что - показатель?
источник

AB

Alexandr Bezuglov in Laravel для начинающих
Ну да, обычно 50% минимум вообще неактивных, даже в телеграм в общем
источник

AB

Alexandr Bezuglov in Laravel для начинающих
Vladimir Yefremov
А что - показатель?
Количество общающихся наверн) нужен combot))
источник

VY

Vladimir Yefremov in Laravel для начинающих
Alexandr Bezuglov
Количество общающихся наверн) нужен combot))
Ну, на самом деле, формат  группового  чата - не очень способствует общению. Как только обсуждают больше 2-х тем параллельно - неудобно различать... Начинается свалка.
Здесь удобно задать вопрос, в котором тупишь, получить направление решения и уйти решать...
источник

AB

Alexandr Bezuglov in Laravel для начинающих
Но все равно именно активных мало, помогают одни и те же
источник

AH

Andrey Helldar in Laravel для начинающих
Діма
Не могу понять как передать и отобразить ту переменную
'attributes' => 'data'
Для этого тебе надо самому ее в 'data' обернуть.

Прлсто заюзай пакет и он сам будет все оборачивать. Подробнее в ридми читани: https://github.com/andrey-helldar/api-response
источник

VT

Vladimir Tsakhilov in Laravel для начинающих
mr. angeluss
Всем привет. Подскажите плз:
Есть сущность product (id, name). Есть сущность Entity(id, entity_type, entity_id, product_id)

Поступает запрос $data=['entity_type', 'entity_id', 'product_ids']; Соответственно, для каждого из ids нужно создать Запись в БД.
Пока делаю так:
foreach($data['product_ids'] as $id) {
   $this->repository->create( ['entity_type' =>$data['entity_type], 'entity_id' => $data['entity_id'], 'product_id' => $id]);
}

И все бы хорошо, но $data['ids'] реально может содержать много записей. Как это правильней сохранять?
Есть вариант много лучше. Твой подход очень жирный по ресурсам
источник

AH

Andrey Helldar in Laravel для начинающих
Andrey
Точно не помню, но вроде вместо attributes пишешь Json
Не, data это ключ. Ему надо вручную создать массив с ключом data и возвращать
источник

AH

Andrey Helldar in Laravel для начинающих
Діма
Вообще, может подскажешь.
Если работаю из разными программами и api запросами.
То ошибок не сильно видно как обычно.

Что с этим делаешь?

Например пропустил запятую.
А тебе возвращает
500
вместо ларавеловской ошибки...
Логи...
источник

AH

Andrey Helldar in Laravel для начинающих
При отправке тебе надо ключ не attributes совать, а form_params либо json:
http://docs.guzzlephp.org/en/stable/request-options.html?highlight=json#json
источник

AH

Andrey Helldar in Laravel для начинающих
Dmitry M
Такой вопрос, при использовании сервисного слоя где расположить классы, которые используются сервисом? Например: в системе есть заказы, что-бы заказ был оформлен автоматически он должен соответствовать определённым требованиям (правилам). Предположим у нас есть сервис OrderService в котором есть метод attemptAutoCheckout() (попытка автоматического оформления, собственно метод, который будет проверять заказ и в случае успеха - оформлять). Но тут фигурирует не только сервис, а ещё класс OrderValidator который осуществляет проверку по определённым правилам, реализующим интерфейс RuleInterface .

Получается, что в контроллере мы вызываем

$this->orderService->attemptAutoCheckout($order);

а уже внутри этого метода у нас:

$this->orderValidator->addRule(new FooRule());
$this->orderValidator->addRule(new BarRule());

if (! $this->orderValidator->validate($order)) {
 $errors = $this->orderValidator->getErrorMessages();
}

Вопрос, куда разместить OrderValidator , RuleInterface , FooRule , BarRule ? Если просто закинуть рядом с OrderService в директорию Services/ то непонятно что к чему относится (а ведь OrderValidator как бы логически связан именно с OrderService ), в отдельную директорию вынести? Или что? Как бы вы поступили?
App\Validations\Orders\OrderValidation

App\Contracts\RuleInterface

App\Rules\FooRule
источник

AH

Andrey Helldar in Laravel для начинающих
Alexandr Bezuglov
Но все равно именно активных мало, помогают одни и те же
Есть такая беда, да
источник

AH

Andrey Helldar in Laravel для начинающих
Но тогда если у него на тех моделях есть обсерверы и/или эвенты, они при инсерте не сработают.
источник

AH

Andrey Helldar in Laravel для начинающих
mr. angeluss
Всем привет. Подскажите плз:
Есть сущность product (id, name). Есть сущность Entity(id, entity_type, entity_id, product_id)

Поступает запрос $data=['entity_type', 'entity_id', 'product_ids']; Соответственно, для каждого из ids нужно создать Запись в БД.
Пока делаю так:
foreach($data['product_ids'] as $id) {
   $this->repository->create( ['entity_type' =>$data['entity_type], 'entity_id' => $data['entity_id'], 'product_id' => $id]);
}

И все бы хорошо, но $data['ids'] реально может содержать много записей. Как это правильней сохранять?
Делаешь релейшн hasMany и создаёшь записи через createMany: https://laravel.com/docs/6.x/eloquent-relationships#the-create-method


$post = App\Post::find(1);

$post->comments()->createMany([
   [
       'message' => 'A new comment.',
   ],
   [
       'message' => 'Another new comment.',
   ],
]);
источник

VT

Vladimir Tsakhilov in Laravel для начинающих
mr. angeluss
Всем привет. Подскажите плз:
Есть сущность product (id, name). Есть сущность Entity(id, entity_type, entity_id, product_id)

Поступает запрос $data=['entity_type', 'entity_id', 'product_ids']; Соответственно, для каждого из ids нужно создать Запись в БД.
Пока делаю так:
foreach($data['product_ids'] as $id) {
   $this->repository->create( ['entity_type' =>$data['entity_type], 'entity_id' => $data['entity_id'], 'product_id' => $id]);
}

И все бы хорошо, но $data['ids'] реально может содержать много записей. Как это правильней сохранять?
mavinoo/laravel-batch посмотри сюда.
источник

DM

Dmitry M in Laravel для начинающих
Andrey Helldar
App\Validations\Orders\OrderValidation

App\Contracts\RuleInterface

App\Rules\FooRule
Rule это не контракт а именно интерфейс, контракт даёт право на что-либо (добавляет тип, он может быть вообще без сигнатур), а интерефейс на то и интерфейс, что-бы описать интерфейс, лол. Я к тому что директория Contracts явно не сюда, либо Interfaces, либо вообще без директории, добавить постфикс Interface
источник

AH

Andrey Helldar in Laravel для начинающих
Vladimir Tsakhilov
mavinoo/laravel-batch посмотри сюда.
Зачем, когда из коробки существует createMany?
источник