Как правильно на один роут повесить разные контроллеры (и правилен ли вообще такой подход)?
Привет
Нужно реализовать сайт с разными ролями у пользователей, например : админ, модератор, проверяющий, удаленщик
После авторизации всех юзеров не зависимо от роли перекидывает на их личный кабинет по адресу /profile
Вот тут и вопрос - у каждой роли свой личный кабинет, со своими выборками, сопутствующими методами
то есть на один роут должны отвечать разные методы, или возможно разные контроллеры, в зависимости от роли авторизовавшегося юзера
причем таких роутов много: каждый раздел будет зависеть от роли
Как бы вы это реализовали средствами laravel ?
В контроллере можешь написать логику, которая будет смотреть на роль пользователя, и в зависимости от ее, вызыывать нужный тебе метод, в котором будет вся твоя логика.
Предположим юзер заходит на дашборд - по вашей логике срабатывает метод $this->userDashboard
Этот метод использует еще парочку приватных методов с этого же контроллера, специально для роли "юзер"
Потом админ заходит на дашборд - срабатывает $this->adminDashboard - у него тоже 2-3 приватных метода с этого же контроллера
Если ролей будет 4-5 то получится очень толстый контроллер
Мне ваш подход нравится, однако было бы здорово все таки использовать разные контроллеры под разные роли, так как кол-во вспомогательных методов большое, и все их держать в одном контроллере - сложновато
Есть ли у вас вариант как сделать тематическое(по ролям) разделение по контроллерам ?
Родион Юрченко, Если будет много логики, тем более похожей, ее можно вынести в сервис класс.
Ну мне лично не нравится идея, делать разные котроллеры под один роут, так как в них не должно быть логики. Один роут обрабатывает один котроллер, а уже в нем дергайте нужную логику
1. создание контроллеров для admin, moderator и тд
2. формирование меню для авторизованного клиента (Персональная информация выглядит как /personal/info )
3. создание роутинга , направление на контроллеры в зависимости от роли (Controllers/Admin/PersonalInfo, Controllers/Moderator/PersonalInfo и тд)
Получается надо в роутинг засунуть логику по определению роли юзера ?
То есть если юзер тыкнул на линк /personal/info - то этот запрос зарезолвится в Controllers/User/PersonalInfo
А если админ тыкнул на ту же ссылку (/personal/info) - - то этот запрос зарезолвится в Controllers/Admin/PersonalInfo
Разве помещать логику в роутинг - хорошо ?
Или если я не правильно вас понял - просьба разъяснить кто и где будет принимать решения в какой контроллер резолвить запрос ?