@Gristen

Как связать ajax и php ООП?

Здравствуйте , решил написать регистрацию с помощью php ооп + ajax т.к не нравится перезагрузка страницы , но столкнулся с вопросом как их связать в одно .
Структура файлов :
app
--controllers
--models
--Services
--VIews
assets
--js
router
--router.php
vendor
--autoload.php
views
--pages
index.php

в Index.php следующий код ( просто подключаю автолоадер (psr-4) и роутинг
require_once __DIR__."/vendor/autoload.php";
require_once __DIR__."/router/routes.php";

В роутенге написано следущее
Router::page("/home",'home',\app\controllers\homeController::class,"action");
Router::page("/register",'register',\app\controllers\UsersController::class,"index_register");
Router::page("/login",'login',\app\controllers\UsersController::class,"index_login");
Router::page("/",'home',\app\controllers\homeController::class,"action");

Если кратко , то роутинг получает информацию которая написана в адресной строке и запускает метод enable , который в свою очередь делает следующее :
public static function enable()
    {
        $q = $_GET["q"]; //содержимое адресной строки

        foreach (self::$list as $route) 
        {

            if ($route['url'] === '/' . $q) 
            {
                    $action = new $route["class"]; тут мы получаем класс UsersController.php 
                    $method = $route["method"]; //название метода index_register
                    $action->$method(); // вызываем этот метод который в свою очередь просто генерирует html разметку.
            }


UsersController
if (!empty($_POST)) {
    UsersController::signUP(); //вот тут ошибка выскакивает
}
class UsersController extends Controller
{

    public function index_register()
    {
        $this->view->generate("register.php");
    }
    public static function signUP()
    {
        echo "test";
    }

при вызове метода signUP класса UsersController выдает ошибку Uncaught Error: Class 'app\controllers\UsersController' not found .
Я не пойму он не может видеть класс хотя я нахожусь в этом же файле что и класс . Как мне тогда вызвать этот метод ?
UPD
если я вместо
$action = new $route["class"]; тут мы получаем класс UsersController.php 
                    $method = $route["method"]; //название метода index_register
                    $action->$method(); // вызываем этот метод который в свою очередь просто генерирует html разметку.

Сделаю просто
include "views/pages/register.php";
В UsersController уберу exdens controller ( т.е перестану его наследовать ) то
if (!empty($_POST)) {
    UsersController::signUP();
}

начнет работать и видеть UsersController и его метод
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы