Раз уж зашел разговор про voters, какой правильный кейс их

использования?
Вот допустим есть command/handler . Задача - редактирование только своей записи. Это выходит надо запись получить в контроллере и пропихнуть ее в voters, прежде чем запускать handler? Не перегружается ли контроллер такими действиями?
Т.е. мы начала получаем запись по ID из репо, а потом ID запускаем в хэндлер и снова тянем из репо. Т.е. делаем это 2 раза. Это хорошо что у нас там IdentityMap, и нет лишних запросов.

25 ответов

2 просмотра

а ты в курсе что можно сразу entity закинуть в isGranted/denyAccessblabla и не мучаться

Павел-Г. Автор вопроса
Konstantin dmz9
а ты в курсе что можно сразу entity закинуть в isG...

Так я об этои и говорю, что Entity надо достать, и делать это в контроллере.

Павел Г.
Так я об этои и говорю, что Entity надо достать, и...

ну э да, достал в контроллере, чекнул права через isGranted или сразу кидаешь исключение через denyAccessUnlessGranted. собственно, в документации же это и описано как кейс их использования. насчет правильности - это еще подумать - правильность чего, типа в правильном ли месте ты это вызываешь? но есть ведь твоя система где ты уже доверяешь данным между своими модулями, и есть внешний мир из которого приходят данные. права чекаешь один раз - перед тем как продолжить работать. или ты сомневаешься надо ли их чекать в каждом "хендлере"? есть ведь простая аналогия - аэропорт - проходишь осмотр один раз и дальше уже тусуешься в зоне вылета. так и тут - проверил один раз - а дальше ты уже в "доверенной" зоне где повторно всё то же самое проверять не имеет смысла.

Павел-Г. Автор вопроса
Konstantin dmz9
ну э да, достал в контроллере, чекнул права через ...

Вопрос в том, почему мы в контроллере достаем объект бизнес логики, а то и не один, так как ACL(layer) может быть сложным. Почему в контроллере вообще используется репо. В общем вопрос в хорошей практике, а не в документации.

Павел Г.
Вопрос в том, почему мы в контроллере достаем объе...

А в чем проблема в контроллере репу использовать?

Павел Г.
Вопрос в том, почему мы в контроллере достаем объе...

а что хотели от точки входа в приложение? или хочется размазать бизнес логику по разным местам - типа где то "до" достать сущность, где то "до" проверить права? а что тогда останется в самом контроллере? может у кого то есть "более лучшие практики" но лично меня не смущает что в контроллере можно получить 15 зависимостей и у каждой вызвать по одному методу. да, много аргументов, но от контроллера требуется что? организовать их совместную работу, не делая самостоятельно ничего. ну т.е. не контроллер достает из базы данных сущность - он просит делать это репозиторий. не контроллер чекает права - он просит это делать отдельный сервис. но как по мне вся логика запроса должна быть очевидной и в одном месте. поэтому я это размещаю все в методе контроллера. сложная логика acl - ну так прекрасно, пиши в вотерах её, туда же получи нужные зависимости если они требуются

Павел-Г. Автор вопроса
Павел-Г. Автор вопроса
Павел-Г. Автор вопроса
Aleksandr Khristenko
Почему?

Потому что мы в слое который отвечает за request/responce лезем в базу данных и управляем сущностями

Павел Г.
Потому что мы в слое который отвечает за request/r...

Мы не лезет в базу. Мы обращаемся к репозиторию.

Павел Г.
Потому что мы в слое который отвечает за request/r...

та я видел и реализации типа Controller:method ( $id, Business $business ) $business->doSomething($id); $business->finishWork(); return $business->result(); что можно понять из этого кода вообще? )

Павел-Г. Автор вопроса
Konstantin dmz9
та я видел и реализации типа Controller:method ( $...

идеальная реализация контроллера

Павел-Г. Автор вопроса
Aleksandr Khristenko
Мы не лезет в базу. Мы обращаемся к репозиторию.

мы к репо обычно лезем из бизнеса, а тут из контроллера.

Павел Г.
мы к репо обычно лезем из бизнеса, а тут из контро...

а можно бизнес логика не будет знать о существовании репозитория? спасибо

Павел-Г. Автор вопроса
Павел Г.
мы к репо обычно лезем из бизнеса, а тут из контро...

Если тебе нужно в действии контроллера вытащить данные и прокинуть их в твин ты для этого тоже отдельную сущность будешь делать или в контроллере сделаешь?

Павел Г.
Можно, если ей передавать готовые данные

ну так мы это и делаем не? Controller:method ( $id, Business $business, Repository $repo ) $business->doSomething($repo->find($id)); $business->finishWork(); return $business->result();

Павел-Г. Автор вопроса
Aleksandr Khristenko
Если тебе нужно в действии контроллера вытащить да...

Ну тут мысль верная, в чтении можно сразу в базу. Но там мы тащим не сущность, а какой нить массив/дто.

Павел-Г. Автор вопроса
Konstantin dmz9
ну так мы это и делаем не? Controller:method ( $id...

Я не совсем вас понимаю. Тут вы тащите репо в бизнес.

Павел Г.
Ну тут мысль верная, в чтении можно сразу в базу. ...

А если перед тем как отобразить нам надо проверить что можно отобразить?

Павел Г.
Можно сделать queryHandler

Зачем? Я думал все это разделение ради принципа единой ответственности и повторного использования. И использования репозиторию в контроллере мне кажется не противоречит.

Похожие вопросы

Обсуждают сегодня

Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
А чего при переходе с 2 на 3 все что в билдере сделано тютю?
Денис Александрович
5
Всем привет, Добавил в плагин определение user agent public function registerMarkupTags() { return [ 'filters' => [ 'staticPage' => ['RainLab\Pages\Cl...
John Norton Kruger
3
Я колись ставив гуглу антиспам 3.0, може і норм, але мені не дуже зайшло. Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив 1. Перевір...
𝓔𝓾𝓰𝓮𝓷𝓮𝓥 J
2
К слову, почему бы не использовать ссылки на папки, вместо инвайтинга?
Артем Уколов
3
Кастомные эмодзи для ботов доступны только элите, верно?
山 | Bobby | 山
3
Всем привет, может кто знает нормальных иностранных хостинг провайдеров. Что бы по качеству аналогичные netangels, beget, timeweb?
Black Cat
4
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
а плагин никто еще не написал ?
DAVID (Data Analyst)
2
Добрый день , слышали про то что XML схемы https://schemas.xmlsoap.org/soap/envelope/ перестали работать со поза-вчера. А домен https://schemas.xmlsoap.org/ , отвечает 404 оши...
Max Dubovsky
3
Карта сайта