Я подхожу к программе с помощью 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