Автозагрузчик PHP 5.4 не работает должным образом с пространствами имен - PullRequest
0 голосов
/ 24 октября 2018

У меня есть 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';

моя структура:

enter image description here

РЕДАКТИРОВАТЬ 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;
    }
}
...