Форумы портала PHP.SU » » Объектно-ориентированное программирование » Как использовать AJAX в MVC петерне?

Страниц (1): [1]
 

1. Stell - 04 Января, 2021 - 15:52:34 - перейти к сообщению
Здравствуйте, не могу понять как сделать AJAX используя патерн MVC! Код моего Route.php:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. /**
  5. * Класс Router
  6. * Компонент для работы с маршрутами
  7. */
  8. class Router
  9. {
  10.  
  11.     /**
  12.      * Свойство для хранения массива роутов
  13.      * @var array
  14.      */
  15.     private $routes;
  16.     /**
  17.      * Конструктор
  18.      */
  19.     public function __construct()
  20.     {
  21.         // Путь к файлу с роутами
  22.         $routesPath = ROOT . '/config/routes.php';
  23.  
  24.         // Получаем роуты из файла
  25.         $this->routes = include($routesPath);
  26.     }
  27.  
  28.     /**
  29.      * Возвращает строку запроса
  30.      */
  31.     private function getURI()
  32.     {
  33.         if (!empty($_SERVER['REQUEST_URI'])) {
  34.             return trim($_SERVER['REQUEST_URI'], '/');
  35.         }
  36.     }
  37.     /**
  38.      * Метод для обработки запроса
  39.      */
  40.     public function run()
  41.     {
  42.         // Получаем строку запроса
  43.         $uri = $this->getURI();
  44.  
  45.         // Проверяем наличие такого запроса в массиве маршрутов (routes.php)
  46.         foreach ($this->routes as $uriPattern => $path) {
  47.  
  48.             // Сравниваем $uriPattern и $uri
  49.             if (preg_match("~$uriPattern~", $uri)) {
  50.  
  51.                 // Получаем внутренний путь из внешнего согласно правилу.
  52.                 $internalRoute = preg_replace("~$uriPattern~", $path, $uri);
  53.  
  54.                 // Определить контроллер, action, параметры
  55.  
  56.                 $segments = explode('/', $internalRoute);
  57.                 $controllerName = array_shift($segments) . 'Controller';
  58.                 $controllerName = ucfirst($controllerName);
  59.  
  60.                 $actionName = 'action' . ucfirst(array_shift($segments));
  61.  
  62.                 $parameters = array_values(array_merge($segments, $_POST));
  63.  
  64.                 // Подключить файл класса-контроллера
  65.                 $controllerFile = ROOT . '/controllers/' .
  66.                     $controllerName . '.php';
  67.  
  68.                 if (file_exists($controllerFile)) {
  69.                     include_once($controllerFile);
  70.                 }
  71.  
  72.                 // Создать объект, вызвать метод (т.е. action)
  73.                 $controllerObject = new $controllerName;
  74.  
  75.                 /* Вызываем необходимый метод ($actionName) у определенного
  76.                  * класса ($controllerObject) с заданными ($parameters) параметрами
  77.                  */
  78.                 $result = call_user_func_array(array($controllerObject, $actionName), $parameters);
  79.  
  80.                 // Если метод контроллера успешно вызван, завершаем работу роутера
  81.                 if ($result != null) {
  82.                     break;
  83.                 }
  84.             }
  85.         }
  86.     }
  87.  
  88. }
  89.  


Вот мои роуты все:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.     return array(
  4.         '^/*$' => 'home/index',
  5.         'login' => 'user/login',
  6.         'register' => 'user/register',
  7.         'account' => 'account/index',
  8.         'logout' => 'user/logout',
  9.         'support' => 'support/index',
  10.         'feed/article/([0-9]+)' => 'feed/article/$1',
  11.         'feed' => 'feed/index',
  12.         'feed/([0-9]+)' => 'feed/index/$1', //pagination
  13.         'cars-select/([0-9]+)' => 'cars/index/$1',
  14.         'cars-select/cars/([0-9]+)' => 'cars/cars/$1',
  15.         'cars-select/([a-z]+)' => 'cars/marks/$1',
  16.         'cars-select' => 'cars/index',
  17.         'market' => 'market/index',
  18.         'admin/users' => 'admin/users',
  19.         'admin/feed/edit' => 'admin/feed',
  20.         'admin/cars/edit' => 'admin/cars',
  21.         'admin' => 'admin/index'
  22.         //'news/([0-9]+)' => 'news/view/$1'
  23.     );
  24.  

Вот мой AJAX Запрос:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.             var select = document.querySelector('.type_cars');
  3.             select.addEventListener('change', (event) => {
  4.                 event.preventDefault()
  5.                 $.ajax({
  6.                     type: "POST",
  7.                     url: "/admin/cars/edit",
  8.                     dataType: 'text',
  9.                     data: {type_cars: select.value},
  10.                     success: function(data){
  11.                         alert(data)
  12.                     },
  13.                     error: function (r) {
  14.                         alert("Ошибка ajax");
  15.                     }
  16.                 });
  17.             })
  18.  
  19.  


Вот собственно как можно отправить AJAX НА контроллер и как его обратно отдать на фронтенд(JS)
Помогите пжжж, очень срочно нужно!

 

Powered by ExBB FM 1.0 RC1