@djok2142

Как сгруппировать несколько обработчиков AJAX запросов в одном контроллере LARAVEL?

Изучаю Laravel и ООП, параллельно пишу на нем сайт. Встала необходимость использовать ajax запросы.
До этого использовал движок одной CMS написанной преимущественно с использованием процедурного подхода, и там была реализована следующая система обработки ajax запросов. Отдельная папка "/ajax" в которой лежало много php файлов, каждый из которых отвечал за определенные ajax запросы.
Все ajax запросы пользователей осуществлялись к скрипту"/ajax/controller.php", в который передавалось название php файла, который следует использовать, то есть например так "/ajax/controller.php?mod=add_comment", и в скрипте происходила проверка, существует ли файл add_comment.php и если да то он инклудился, а если нет то отдавалась ошибка 404. И это было достаточно удобно, так как в "controller.php" подключались все библиотеки и не было нужды каждый раз их прописывать во всех php файлах для ajax запросов.

И вот собственно пытаюсь реализовать нечто подобное на Laravel, что бы все ajax запросы слать по одному адресу, который будет обрабатывать один контроллер, но при этом что бы для каждой группы задач (загрузка файлов, отправка сообщений, быстрый поиск и тд.), код лежал в разных файлах.

По идеи нужно создать контроллер, например "AjaxController" и роут для него, например "/ajax/[имя задачи]/", но вот что дальше делать, представляю смутно. Как я понимаю напрямую инклудить php файлы в Laravel не очень правильно. Как тогда можно в контроллере организовать автоматическое использование кода из определённого php файла, в зависимости от переданного параметра, и в каком виде должны быть отдельные файлы, каждый в виде отдельного класса, или наследовать класс AjaxController?

Для каждого отдельной группы ajax запросов, прописывать в роутах отдельный роут и контроллер, как-то это очень муторно и неудобно.
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 2
vfreelancer
@vfreelancer
php
хотя так считается неправильным делать, так как код усложняется и трудно поддерживается, но все же: в контроллере разбираете параметр mod. например, add_comment - то есть должен быть CommentController с методом add. Далее проверяете есть ли такой класс и есть ли у него такой метод - это делается с помощью нативного php (гуглите), далее создаете этот объект и вызываете этот метод. Например, через laravel resolve (гуглите)

вариант проще: через switch или if/else. if ($class === 'comment') && $method === 'add') { return app('App\Http\Controllers\CommentController')->add();}
здесь $class = explode('_', $mod)[0], $method = explode('_', $mod)[1];
Ответ написан
Комментировать
@jazzus
Как связаны какая-то там CMS и фреймворк Ларавел? В Ларавел свой метод работы и архетиктура. Роут-метод контроллера-фронт. РКФ. Один роут вызывает один метод контроллера, который обрабатывает запрос и отдает результат. Непонятно, как работает - значит нужно изучить, а не пилить костыли.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы