Как использовать AJAX в MVC петерне?

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
26 Фев 2019
Сообщения
21
Реакции
0
Здравствуйте, не могу понять как сделать AJAX используя патерн MVC! Код моего Route.php:

PHP:
Expand Collapse Copy
<?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:
Expand Collapse Copy
<?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'
    );

Вот мой AJAX Запрос:

JavaScript:
Expand Collapse Copy
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!
Вот структура проекта(Если нужно)
Screenshot_1.png

Вот собствено как можно отправить AJAX НА контроллер и как его обратно отдать на фронтенд(JS)
Помогите пжжж, очень срочно нужно!
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
JavaScript:
Expand Collapse Copy
var select = document.querySelector('.type_cars');
select.addEventListener('change', (event) => {
    $.ajax({
        url: '/feed',
        method: 'post',
        dataType: 'json',
        data: {text: select},
        success: function(data){
            alert(data);
        }
    });
});

PHP:
Expand Collapse Copy
class FeedController extends BaseController {
    
    public function index($data-post-ajax) {
        $obj = json_decode($data-post-ajax);
        print $obj->{'data'};
    }
}

Небольшой пример
 
JavaScript:
Expand Collapse Copy
var select = document.querySelector('.type_cars');
select.addEventListener('change', (event) => {
    $.ajax({
        url: '/feed',
        method: 'post',
        dataType: 'json',
        data: {text: select},
        success: function(data){
            alert(data);
        }
    });
});

PHP:
Expand Collapse Copy
class FeedController extends BaseController {
   
    public function index($data-post-ajax) {
        $obj = json_decode($data-post-ajax);
        print $obj->{'data'};
    }
}

Небольшой пример
Спасибо за ответ! Но объясните что здесь что!
1. Откуда берется наследование класса
2. Зачем это
PHP:
Expand Collapse Copy
($data-post-ajax)
откуда это, это будет обрабатывать мой Route.php!!!??
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Спасибо за ответ! Но объясните что здесь что!
1. Откуда берется наследование класса
2. Зачем это
PHP:
Expand Collapse Copy
($data-post-ajax)
откуда это, это будет обрабатывать мой Route.php!!!??

1) Наследуется базовый контроллер
2) Это не обязательно, все зависит от того как вы сделали свой скрипт, можете просто использовать $_GET['name'] запрос
 
Назад
Сверху Снизу