Автозагрузка php композитора и имя класса в var (класс не найден)Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Автозагрузка php композитора и имя класса в var (класс не найден)

Сообщение Anonymous »

Я подхожу к программе с помощью MVC, автозагрузки и композитора... возможно, что-то ускользает от меня.
Когда я открываю / моего сайта (www.mysite.com), он должен вызвать индекс метод класса UserController, но, к сожалению, этого не происходит, и я получаю сообщение об ошибке (в строке 25 я делаю $class=new $controller() в Router.php):
Fatal error: Uncaught Error: Class "UserController" not found in /Users/denis/Herd/ctf/App/Core/Router.php on line 25

Error: Class "UserController" not found in /Users/denis/Herd/ctf/App/Core/Router.php on line 25

Я также пытался сделать $class = new $controller, но ничего не изменилось...
Если вместо этого я сделаю $class = new UserController(); все работает нормально... поэтому я предполагаю, что автозагрузка работает, записывая имя класса, а не в переменную...
Структура папок:\App\
Controllers\
UserController.php
Core\
Controller.php
Router.php
routes.php

\Public\
index.php

\composer.json

composer.json:
"autoload": {
"psr-4": {
"App\\": "App/"
}
}

index.php:
use App\Controllers\UserController;

require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../config.php';

App\Core\Router::route();

Router.php:
namespace App\Core;

use App\Controllers;

class Router{
public static function route(){
require __DIR__ . '/../routes.php';

$request = trim($_SERVER['REQUEST_URI']);

if (array_key_exists($request, routes)) {
$controller = routes[$request][0];
$method = routes[$request][1];

if (file_exists(BASE_PATH . '/App/Controllers/' . $controller . '.php')) {
//$a = new UserController(); $method();
exit;
}
}
}
// Not found
}
}

routes.php:
const routes = array(
'/' => array('UserController', 'index'),
...
);

UserController.php:
namespace App\Controllers;

use App\Core\Controller;

Class UserController extends Controller{

public function index(){
...
}
}

Controller.php:
namespace App\Core;
use Smarty\Smarty;

Class Controller{
public function __construct(){
session_start();
error_reporting(E_ALL);

$smarty = new Smarty();
$smarty->setTemplateDir(BASE_PATH.'/templates')
->setCompileDir(BASE_PATH.'/templates_c')
->setCacheDir(BASE_PATH.'/cache');
ini_set('display_errors', 'On');

$smarty->assign('APP_TITLE', APP_TITLE);
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... -not-found
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»