Здравствуйте , решил написать регистрацию с помощью 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 и его метод