У меня есть autoloader.php в корне моего проекта:
<?php
spl_autoload_register('AutoLoader');
function AutoLoader($className)
{
// imports files based on the namespace as folder and class as filename.
$file = str_replace('\\',DIRECTORY_SEPARATOR, $className);
require_once $file . '.php';
}
в моей папке webroot У меня есть файл index.php, где мне нужен этот автозагрузчик:
require_once '../autoload.php';
теперь в корне моего проекта у меня есть папка контроллеров и файл adminContoller.php, который выглядит следующим образом:
<?php
namespace controllers;
class adminController extends Controller
{
теперь я получаю следующие ошибки:
Предупреждение:require_once (adminController.php): не удалось открыть поток: нет такого файла или каталога в / некоторые папки / autoload.php в строке 9
Неустранимая ошибка: require_once (): не удалось открыть обязательный 'adminController.php' (include_path = '.: / usr / share / pear: / usr / share / php') в / некоторые папки / autoload.php в строке 9
это строка 9 в autoload.php require_once $file . '.php';
моя структура:
РЕДАКТИРОВАТЬ 1 полный index.php
<?php
require_once '../autoload.php';
define('WEBROOT', str_replace("webroot/index.php", "", $_SERVER["SCRIPT_NAME"]));
define('ROOT', str_replace("webroot/index.php", "", $_SERVER["SCRIPT_FILENAME"]));
//require(ROOT . 'config/core.php');
require(ROOT . 'router.php');
require(ROOT . 'request.php');
require(ROOT . 'dispatcher.php');
$dispatch = new Dispatcher();
$dispatch->dispatch();
РЕДАКТИРОВАТЬ 2 полный диспетчерФайл .php:
<?php
class Dispatcher
{
private $request;
public function dispatch()
{
$this->request = new Request();
Router::parse($this->request->url, $this->request);
$controller = $this->loadController();
call_user_func_array([$controller, $this->request->action], $this->request->params);
}
public function loadController()
{
$name = $this->request->controller . "Controller";
$file = ROOT . 'Controllers/' . $name . '.php';
require($file);
$controller = new $name();
return $controller;
}
}