-
Автор темы
- #1
Здравствуйте, не могу понять как сделать AJAX используя патерн MVC! Код моего Route.php:
Вот мои роуты все:
Вот мой AJAX Запрос:
Это сомописный MVC!
Вот структура проекта(Если нужно)
Вот собствено как можно отправить AJAX НА контроллер и как его обратно отдать на фронтенд(JS)
Помогите пжжж, очень срочно нужно!
PHP:
<?php
/**
* Класс Router
* Компонент для работы с маршрутами
*/
class Router
{
/**
* Свойство для хранения массива роутов
* @var array
*/
private $routes;
/**
* Конструктор
*/
public function __construct()
{
// Путь к файлу с роутами
$routesPath = ROOT . '/config/routes.php';
// Получаем роуты из файла
$this->routes = include($routesPath);
}
/**
* Возвращает строку запроса
*/
private function getURI()
{
if (!empty($_SERVER['REQUEST_URI'])) {
return trim($_SERVER['REQUEST_URI'], '/');
}
}
/**
* Метод для обработки запроса
*/
public function run()
{
// Получаем строку запроса
$uri = $this->getURI();
// Проверяем наличие такого запроса в массиве маршрутов (routes.php)
foreach ($this->routes as $uriPattern => $path) {
// Сравниваем $uriPattern и $uri
if (preg_match("~$uriPattern~", $uri)) {
// Получаем внутренний путь из внешнего согласно правилу.
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);
// Определить контроллер, action, параметры
$segments = explode('/', $internalRoute);
$controllerName = array_shift($segments) . 'Controller';
$controllerName = ucfirst($controllerName);
$actionName = 'action' . ucfirst(array_shift($segments));
$parameters = array_values(array_merge($segments, $_POST));
// Подключить файл класса-контроллера
$controllerFile = ROOT . '/controllers/' .
$controllerName . '.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
}
// Создать объект, вызвать метод (т.е. action)
$controllerObject = new $controllerName;
/* Вызываем необходимый метод ($actionName) у определенного
* класса ($controllerObject) с заданными ($parameters) параметрами
*/
$result = call_user_func_array(array($controllerObject, $actionName), $parameters);
// Если метод контроллера успешно вызван, завершаем работу роутера
if ($result != null) {
break;
}
}
}
}
}
PHP:
<?php
return array(
'^/*$' => 'home/index',
'login' => 'user/login',
'register' => 'user/register',
'account' => 'account/index',
'logout' => 'user/logout',
'support' => 'support/index',
'feed/article/([0-9]+)' => 'feed/article/$1',
'feed' => 'feed/index',
'feed/([0-9]+)' => 'feed/index/$1', //pagination
'cars-select/([0-9]+)' => 'cars/index/$1',
'cars-select/cars/([0-9]+)' => 'cars/cars/$1',
'cars-select/([a-z]+)' => 'cars/marks/$1',
'cars-select' => 'cars/index',
'market' => 'market/index',
'admin/users' => 'admin/users',
'admin/feed/edit' => 'admin/feed',
'admin/cars/edit' => 'admin/cars',
'admin' => 'admin/index'
//'news/([0-9]+)' => 'news/view/$1'
);
JavaScript:
var select = document.querySelector('.type_cars');
select.addEventListener('change', (event) => {
$.ajax({
url: '',
method: 'post',
dataType: 'json',
data: {text: select},
success: function(data){
alert(data);
}
});
});
Это сомописный MVC!
Вот структура проекта(Если нужно)
Вот собствено как можно отправить AJAX НА контроллер и как его обратно отдать на фронтенд(JS)
Помогите пжжж, очень срочно нужно!