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
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
Skiphog
@Skiphog
Crutch developer
use в данном случае не работает.
т.к. вы динамически создаёте объект, нужно явно указать namespace routetest\Controllers
// ...

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

$obj = new $controller();


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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 12:20
15000 руб./за проект
25 апр. 2024, в 12:08
300 руб./за проект
25 апр. 2024, в 11:49
25000 руб./за проект