Size: a a a

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

2021 June 28

D

David in Laravel для начинающих
Ахаха)
источник

AS

Alexander Sorokin in Laravel для начинающих
Всем добрый вечер.

Обычно я пишу на symfony, но сейчас проект на laravel попался, поэтому прошу не воспринимать в штыки мои аналогии.

В общем подскажите пожалуйста по DI. Хотелось бы автоматически передать на вход фабрике список имплементаций определенного интерфейса. В прошлый раз когда я обращался с этим вопросом, то дошли до такого варианта:

       $this->app->tag(SomeInterface::class, 'some.method');
       $this->app->bind(SomeFactory::class, function ($app) {
           return new SomeFactory($app->tagged('some.method'));
       });

К сожалению он не работает, поскольку формирует ошибку

Target [App\...\SomeInterface] is not instantiable while building  ...

Я полазил и по инету и по доке и все сходится к тому, что в laravel нет никакого аналога тегирования по instanceof. А на вход ->tag требуется что-то, что можно создать ( не абстрактный класс и не интерфейс ).  Но как бы хотелось бы именно гибкую фабрику, которой не надо прописывать все реализации вручную, а достаточно унаследовать соответствующий интерфейс.

Возможно кто-то уже сталкивался и подскажет как это обойти? Пробовал имитировать за счет get_declared_classes + class_implements, но в первом не нужных мне классов, видимо рано вызываю
источник

R#

Reset # Alexey S. in Laravel для начинающих
Service provider?
источник

AS

Alexander Sorokin in Laravel для начинающих
А есть пример сервис провайдера, который делает это универсально, а не за счет

$this->app->tag(Method1::class, 'some.method');
$this->app->tag(Method2::class, 'some.method');
...
и т.д. &
источник

ВШ

Виталий Шутов... in Laravel для начинающих
Массив же в tag должен передаваться, разве нет?
источник

AS

Alexander Sorokin in Laravel для начинающих
можно массив, можно по одному, но это не принципиально
источник

VY

Vladimir Yefremov in Laravel для начинающих
Привет всем!

возможно ли такой выверт сделать?
в этом запросе
return FoodOrder::with('food')->get();
добавить каждой модели food еще одно поле?
или только надо отдельным циклом типа map() пробежаться по готовой коллекции?
источник

MR

Maxim Rebitskiy in Laravel для начинающих
А что за поле?
источник

SS

Serg Serdyuk in Laravel для начинающих
Аксессор?
источник

EG

Egor Gruzdev in Laravel для начинающих
+ appends
источник

VY

Vladimir Yefremov in Laravel для начинающих
надо total = произведение цены на кол-во позиции в заказе
источник

D

DK in Laravel для начинающих
это апи?
источник

VY

Vladimir Yefremov in Laravel для начинающих
монолит, запрос пост Аджаксом
источник

MR

Maxim Rebitskiy in Laravel для начинающих
Ну то что выше, но откуда total береться? Скорей всего вариант выше не пойдет
источник

D

DK in Laravel для начинающих
предлагаю апи ресурс
источник

D

DK in Laravel для начинающих
и там уже калькуляцию нового поля
источник

D

DK in Laravel для начинающих
гы
источник

EG

Egor Gruzdev in Laravel для начинающих
Так это не до поле, а доп элмент, т.е. груба еще одна строка, но с итого
источник

EG

Egor Gruzdev in Laravel для начинающих
Так на стороне js и просуммируй
источник

SS

Serg Serdyuk in Laravel для начинающих
🤷‍♂ если все эти поля (кво, цена) в одной модельке,то аксессор
источник