Юра
А почему нельзя сразу написать DQL раз нужны энтити? Там какие-то особые конструкции которые нельзя выразить через dql?
Andrew
Приветствую! Потихоньку изучаю Symfony, совмещая с практикой, и у меня назрел вопрос, на который не могу нагуглить полноценного ответа. Есть такая штука, как security-bundle. Она, мало того, что считается довольно сложной, для понимания новичками, но и навязывает свои правила разработчику. Говорит: вот у меня есть сущность User, у меня есть ролевая модель и прочие штуки. А мне ролевая модель не нужна и сущность пользователя у меня своя. В связи с этим вопрос звучит так: 1. Считается-ли нормальным НЕ использовать security-bundle в symfony, а писать свою авторизацию и ролевую модель? 1.2. Есть-ли возможность в symfony реализовать Guard'ы, наподобие тех, что имеются в NestJS? По сути, мне это и нужно: чтобы перед контроллером выполнялся какой-то код, который потом пропускает или не пропускает запрос дальше.
Alexey Mishurovskiy
Andrew
По факту, так и есть. Если она может покрыть то, что я хочу от пункта 1.2, тогда можно её и потыкать палочкой. Просто будет ли потраченное время того стоить?
Alexey Mishurovskiy
зачем изобраетать велосипед, если топовые умы сообщества уже все сделали
Konstantin
вопросы довольно глупые, в симфони-секурити минимальная связь с твоим кодом. там три метода в сущности юзера надо реализовать
Konstantin
ролевая модель опциональна, ее можно не включать
Andrew
Вопросы глупые, потому что я не разбирался толком в этом. Поверхностно прошелся по документации, увидел, что какая-то запутанная шляпа и решил уточнить, пользуются ли ей люди, прежде чем тратить уйму времени на понимание этой глубокой задумки. Но раз пользуются, тогда буду изучать и пробовать конфигурировать под себя.
Andrew
Спасибо за оперативные ответы!
The Ant
Приветствую! Потихоньку изучаю Symfony, совмещая с практикой, и у меня назрел вопрос, на который не могу нагуглить полноценного ответа. Есть такая штука, как security-bundle. Она, мало того, что считается довольно сложной, для понимания новичками, но и навязывает свои правила разработчику. Говорит: вот у меня есть сущность User, у меня есть ролевая модель и прочие штуки. А мне ролевая модель не нужна и сущность пользователя у меня своя. В связи с этим вопрос звучит так: 1. Считается-ли нормальным НЕ использовать security-bundle в symfony, а писать свою авторизацию и ролевую модель? 1.2. Есть-ли возможность в symfony реализовать Guard'ы, наподобие тех, что имеются в NestJS? По сути, мне это и нужно: чтобы перед контроллером выполнялся какой-то код, который потом пропускает или не пропускает запрос дальше.
1) да, но зачем? бандл оооочень гибкий. Максимально гибкий. 2) есть, именно так симфа и устроена. тока устанавливаешь свои правила не для контроллеров,а для урлов. и можно в зависимости от условий включить тот или иной "гвард". Читай доку.
Nikolay
а в чем, расскажете?
Для сущности имлементится интерфейс, связанный не напрямую с юзером, а просто для секьюрити, чем засоряет сущность, которая вообще про это не должна знать
Konstantin
ну это софистика какая-то, должна-не должна, вам нужна сущность текущего юзера в коде. это можно считать протечкой абстракции, конечно, но в прикладном коде это удобно. я с трудом себе могу представить код, где текущий юзер - это не сущность
Konstantin
типа ок, будет дтошка какая, в которой лежит юзер_ид. и по этому ид мы на каждый чих селектим юзера из репозитория? а роли?
Nikolay
типа ок, будет дтошка какая, в которой лежит юзер_ид. и по этому ид мы на каждый чих селектим юзера из репозитория? а роли?
Не помню точно, но примерно так юзер через конструктор внедрялся, а методы не в самой сущности реализованы были
The Ant
Никто не шарил симфу, на предмет атрибута для исключений из сервис контейнера? нашел в доке тока #[When(env: 'dev')] class SomeClass { //... } но то такое, хочу что-то более конкретное, чтобы исключать всякие ненужные штуки по типу дтошек\сущностей атрибутьом.
Юра
When env: nonexistent
Юра
?
Юра
)
Сергей
А не проще просто всё подряд не регистрировать?
Юра
Тот же вопрос
Юра
У тебя дто в отдельной папке, просто не указывай её в списке папок в services.yml
Denis
Denis
не то?
Konstantin
где настраиваешь автовайринг/автоконфигур
Konstantin
и там исключаешь глобами свои папки с сущностями, тестами и прочим
Konstantin
но ваще это типа не особо надо, контейнер сам лишнее говно выкинет
The Ant
есть же эксклюды в ямле
Такое себе перечислять всё в массивах, можно и проебать при переименовании\удалении
The Ant
вот к примеру кидаем в папочку сервис, пару дто и пару исключений, в одну. Папку уже не исключить, там сервис. Исключать пофайлово в глобальной конфиге тож не оч. Почему бы сразу не указать атрибутом что не надо (оно точно никогда не надо будет сервис контейнере)
The Ant
в принципе какойнить #[When(env: 'never')] тоже будет работать, но это костыль явно
Konstantin
еще и поэтому симфони предлагает класть все в одну папку - все сущности в одну, формы в другую итд
Konstantin
а зачем дтошки выкидывать из контейнера? он их сам ведь выкинет при оптимизации
The Ant
как он определит что это дто?
Konstantin
он не определит что это дто, он определит что на этот класс "нет входящих ссылок", следовательно в шаге оптимизации можно этот дефинишн выкинуть
Denis
потом самому же сложнее разбирать будет где там что
Konstantin
в контейнере не все классы проекта же, а только граф связанных. если никакой другой сервис не требует класс дтошки как зависимость (а этого нет), то ее выкинут на этапе оптимизации
The Ant
У тебя дто в отдельной папке, просто не указывай её в списке папок в services.yml
у меня не так как у вас, у меня дто в одной папке с сервисом лежит. Потому что оно именно для сервиса и положено туда. Потому что в файл с сервисом нельзя положить из-за всратого пср4 и корявого инклюда
The Ant
к тому же вы топите за превосходство явного над магией :D зачем полагаться на магию сервис контейнера? )
The Ant
крч, хочу! дайте!
Konstantin
точно не положит, попробуй почитать доку. голову советовать включать не буду просить
Denis
ну ты его с его магией выбрал для разработки, пользуйся)
Konstantin
если ты бы не был вечно орущим клоуном, я бы потратил 15 минут и показал на пальцах почему твои предположения абсурдны и основаны на слабом понимании устройства вещей, и как уложить в голове устройство и назначение контейнера
Konstantin
но ты же вряд ли будешь слушать, будешь голосить и нести херню
The Ant
ты бы за языком для начала начал следить, а потом свои никому не интересные реплики вставлять. Ок да?
The Ant
я вроде в предметный разговор пытаюсь, привожу аргументацию
Юра
Можно не пытаться угадать положит или нет, а вызвать debug:container и посмотреть положил или нет
The Ant
есть сервисы, которые содержат в себе стейт, например итераторы. И которые по ошибке могут быть засунусты в контейнер.
Konstantin
я же тебе ответил на вопрос, так работает контейнер, сходи доку почитай. а образ долбоеба, извини уж, сложился за прошлые твои охуительные дискуссии
The Ant
я знаю как он работает, но ты даешь гарантии какие-то, которые апритори не могут быть исполнены в силу человеческого фактора
Юра
Пропиши исключения на основании названия файла
Юра
Если ...Exception то не включать
Юра
А вообще в симфе принято по папкам кидать своим
Юра
Gleb
А вообще в симфе принято по папкам кидать своим
В смысле в рамках юзкейса или фичи тоже раскладывать каждый по папкам? Или в рамках проекта объединять DTO, Transformers и т.д?
Павел
я знаю как он работает, но ты даешь гарантии какие-то, которые апритори не могут быть исполнены в силу человеческого фактора
Короче если занимаешься оптимизацией прода, можно забить хер, как сказали выше - сервисы не участвуют в основном контейнере если на них нет ссылок. Если занимаешься оптимизацией разработки, так как сборка контейнера занимается время - можно попробовать поиграть с exclude и glob паттернами. Но и то не факт, что это даст профит, надо смотреть кишки, как там происходит проход по файлам. Короче по большей части не стоит того, если нет острой и главное понятной для себя необходимости. Ссылка на доку https://symfony.com/doc/current/service_container.html#importing-many-services-at-once-with-resource
Gleb
В смысле в симфони нет фичей и юзкейсов)
Изначально нет, но многие разбивают код на фичи или юзкейсы. А я с большой и правильной разработкой на фреймворках сталкивался мало, поэтому мне интересен вопрос)
Павел
Изначально нет, но многие разбивают код на фичи или юзкейсы. А я с большой и правильной разработкой на фреймворках сталкивался мало, поэтому мне интересен вопрос)
И на фичи, и на юзкейсы (всмысле одновременно). Внутри фичи уже можно выделять типы: сервисы, сущности и т.д. Глобально под ДТО выдялять папку не нравится, только локально. Т.е. ДТО привязано к чему то - если к сервису, то должна лежать рядом с ним, если репо то рядом репо. Ну соответсвенно, если ДТО уже несколько то можно сделать папку, но все равно рядом с сервисом, к которым эти ДТО относятся. Профит: не бегать по проекту, работая с какой то частью кода. Можно копировать папку сервиса в другой проект, и в этой папке уже будет все необходимое для него и только для него, а не искать куски по всему проекту. Да и вообще можно называть не ДТО, короче вариков много, но главное - чтобы класть все рядом с тем, с чем используется.
Павел
https://youtu.be/EvVSxVzFEUg?t=396 вариант Елисеева (более свежий, нежели его симфони аукцион, хотя основное +- такое же)
Gleb
И на фичи, и на юзкейсы (всмысле одновременно). Внутри фичи уже можно выделять типы: сервисы, сущности и т.д. Глобально под ДТО выдялять папку не нравится, только локально. Т.е. ДТО привязано к чему то - если к сервису, то должна лежать рядом с ним, если репо то рядом репо. Ну соответсвенно, если ДТО уже несколько то можно сделать папку, но все равно рядом с сервисом, к которым эти ДТО относятся. Профит: не бегать по проекту, работая с какой то частью кода. Можно копировать папку сервиса в другой проект, и в этой папке уже будет все необходимое для него и только для него, а не искать куски по всему проекту. Да и вообще можно называть не ДТО, короче вариков много, но главное - чтобы класть все рядом с тем, с чем используется.
Теперь понял что имелись в виду фичи и юзкейсы одновременно) Так понятно что не делают, это смешение подходов получается. Интересовало именно разделение внутри фичей или свалка в общих папках. Спасибо большое. Удальцова с комом я посмотрел. Это выступления Дмитрия я не видел, с phpconf 2019 года было не очень понятно, точнее понятно, но слишком крупными мазками.) Без опыта осилить мысль сложно.
Gleb
Ну доклад 2019 был не про эту тему:) Не знаю видели или нет, собственно сам проект аукциона на симфони в стиле by feature https://github.com/ElisDN/demo-project-manager В докладе немного доработок.
В целом знаю что пилится, но ещё не смотрел. Времени не хватает( на работе другой стек, дома учебный проект на сдачу пилю (с трудом и скрипом((( как раз в том числе и по нормальному разделению кода.
Юра
Он не пилится, он был напилен 2 года назад уже)
Значит это уже устаревшее легаси )
Gleb
Он не пилится, он был напилен 2 года назад уже)
Хм, вроде на деворкере у него серия по аукциону не завершена.
Gleb
Значит это уже устаревшее легаси )
В симфе кажется ещё норм) Вот в ларке по-моему да, успевает стать легаси за пару лет)
Павел
Ну основная идея by feature не привязана к фрейму. Такое можно и на ларке пилить.
Konstantin
оно в жизни все равно не очень получается, по крайней мере если не упарываться и не идти на принцип. все равно сервисы про кеши-шины-репозитории знают, сущности про аннотации доктрины, формы-валидаторы и говорить не приходится
Konstantin
нене, я про "не привязываться к фрейму"
Юра
Мне больше нравится подход когда можно удалить папку и забыть про фичу
Konstantin
нене, я про "не привязываться к фрейму"
но я честно говоря перегрелся и читаю жопой :)
Юра
Особенно когда к примеру то копируешь проект, удалил лишние папки фичи и всё. Но в Симфе как-то так не принято