Annikangl
@Annikangl
Backend developer (PHP)

Почему не создается объект класса?

Я создаю каркас MVC приложения, используя composer и библиотеку AltoRouter Про .htaccess не забыл, все запросы направляю на Index.php, однако когда я хочу обработать маршрут, то у меня не создается экземпляр класса IndexController.
Ошибка: Uncaught Error: Class 'IndexController' not found in C:\xampp\htdocs\routetest\public\index.php:18 Stack trace: #0 {main} thrown in C:\xampp\htdocs\routetest\public\index.php on line 18
Я делаю это так:

$obj = new $controller();

Однако если написать так:

$obj = new IndexController();
Ошибка пропадает. Не знаю почему так Вот весь файл index.php

<?php

use routetest\Controllers\IndexController;

require_once dirname(__DIR__) . '/vendor/autoload.php';


$router = new AltoRouter();
$router->setBasePath('/routetest');


$router->map('GET', '/', 'IndexController#index', 'index');

$match = $router->match();


list($controller, $action) = explode('#', $match['target']);

list($controller, $action) = explode('#', $match['target']);
$obj = new $controller();


Структура проекта
606f69ca52993715519440.jpeg
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
Skiphog
@Skiphog
Crutch developer
use в данном случае не работает.
т.к. вы динамически создаёте объект, нужно явно указать namespace routetest\Controllers
// ...

list($controller, $action) = explode('#', $match['target']);
$controller = "routetest\\Controllers\\$controller";

$obj = new $controller();


Можно через ::class, но это уже по другому немного
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы