Size: a a a

2021 January 25

A

AlexS in symfony
Всем привет, вопрос не совсем по симфони, но попробую.
У меня есть сущность, например Shop с связью one-To-Many к другой, пусть это будет Product.
И вот логика добавления $shop->add($product); очень замороченная и зависит только от уже добавленных Product'ов.
Хотелось бы вынести её в какую-то кастомную коллекцию, чтоб она сама себя контролировала, но насколько я понял - кастомные коллекции в доктрине не особо поддерживаются. Думал, может, вынести эту связь в Embeddable-класс и в нём разруливать, но насколько я понял - связи в Embeddable-классах не работают. Хранить эту логику в самом Shop не хочется - там около 200 строк, хочется как-то её вынести, но не совсем понятно куда и как)

Как такие штуки по-правильному разруливаются?
источник

C

CvekCoder in symfony
Как вариант - пусть ваша кастомная коллекция имеет метод ->toArrayCollection() и дергайте ее внутри метода add
источник

SP

Sergey Protko in symfony
AlexS
Всем привет, вопрос не совсем по симфони, но попробую.
У меня есть сущность, например Shop с связью one-To-Many к другой, пусть это будет Product.
И вот логика добавления $shop->add($product); очень замороченная и зависит только от уже добавленных Product'ов.
Хотелось бы вынести её в какую-то кастомную коллекцию, чтоб она сама себя контролировала, но насколько я понял - кастомные коллекции в доктрине не особо поддерживаются. Думал, может, вынести эту связь в Embeddable-класс и в нём разруливать, но насколько я понял - связи в Embeddable-классах не работают. Хранить эту логику в самом Shop не хочется - там около 200 строк, хочется как-то её вынести, но не совсем понятно куда и как)

Как такие штуки по-правильному разруливаются?
сущность Shop которая лежит в контексте продуктов и которая занимается исключительно логикой добавления. То есть там чисто айдишка и коллекция может быть) А вообще это может быть даже не сущность а сервис)
источник

SP

Sergey Protko in symfony
class ShopRepository
{
   public function get(string $id): Shop
   {
       return new Shop($id, $this->productRepository);
   }
}
источник

SP

Sergey Protko in symfony
например как-то так...
источник

SP

Sergey Protko in symfony
p.s. основная мысль - если у тебя есть каталог магазин или еще чего и люди говорят "у магазина есть продукту, описание, адрес и т.д." это не значит что должен быть один класс Shop. Может быть несколько у которых один и тот же ID. За счет этого можно дробить стэйт и логику системы.
источник

A

AlexS in symfony
Sergey Protko
p.s. основная мысль - если у тебя есть каталог магазин или еще чего и люди говорят "у магазина есть продукту, описание, адрес и т.д." это не значит что должен быть один класс Shop. Может быть несколько у которых один и тот же ID. За счет этого можно дробить стэйт и логику системы.
То есть логику добавления выносим в отдельный класс, в котором есть только ShopId
А сам инстанс этого "добавлятора" получаем из репы какой-то или ещё откуда-то, но не из сущности
Правильно я понял?
источник

SP

Sergey Protko in symfony
AlexS
То есть логику добавления выносим в отдельный класс, в котором есть только ShopId
А сам инстанс этого "добавлятора" получаем из репы какой-то или ещё откуда-то, но не из сущности
Правильно я понял?
что-то типа того. Повторюсь - идея резать стэйт и отделять вещи которые не несут смысла для операций друг от дружки.

p.s. С этим подходом стоит опасаться таких вещей как "статус". Они оч быстро превращают все обратно в мессиво из данных если пытаться сложные флоу за счет одного поля закрывать.
источник

SP

Sergey Protko in symfony
вторая идея которая за всем этим стоит - Whole Value Pattern
источник

A

AlexS in symfony
Погуглю, спасибо
источник

SP

Sergey Protko in symfony
на тему whole value могу порекомендовать https://www.destroyallsoftware.com/talks/boundaries
источник

R

Raj in symfony
Guys is there any Admin panel for Symfony?
источник

DD

Den Den in symfony
Raj
Guys is there any Admin panel for Symfony?
sonata-project/admin-bundle
источник

R

Raj in symfony
Sonata and EasyAdmin is very limited and steep learning curve
источник

R

Raj in symfony
I am trying to make my own Admin panel. Now stuck with Grid
источник

R

Raj in symfony
I want to have a advanced grid with filter, sorting, pagination and inline-edits with bulk/mass actions
источник

R

Raj in symfony
Is there any such bundle?
источник

R

Raj in symfony
WIP
источник

SM

Sergey Milegov in symfony
Raj
Is there any such bundle?
EasyAdmin/Sonata ))
источник

A

Anthony in symfony
Have you ever been banned?
источник