Автозагрузчик не работает в простом PHP-файле, не будучи файлом класса

Привет,

Я использую простую структуру модель-представление-контроллер, и я действительно новичок в этом. Я покажу вам контекст:

мой index.php берет URL myweb.com/index.php?controller=access&action=login и требует base.php показать верхний и нижний колонтитулы.

index.php:

if ( isset( $_GET['controller']) && isset( $_GET['action'] ) ) {
$controller = $_GET['controller'];
$action     = $_GET['action'];
} else {
$controller = 'error';
$action     = 'notfound';
}

spl_autoload_register();

require_once('app/base.phtml');

base.php помещает HTML-код верхнего и нижнего колонтитула и экземпляр класса с именем Router который перенаправляет запрос в зависимости от контроллер а также действие URL. Обратите внимание, что я используюspl_autoload_register(); чтобы загрузить мои занятия.

приложение/base.php:

<!-- header code here -->

use src\model\Router;
$router = new Router();
$router->callView($controller, $action);

<!-- footer code here -->

SRC / модель /router.php:

namespace src\model;

class Router
{
function callView($controller, $action)
{
// code here that calls a controller to show a view
}
}

Дело в том, когда мне требуется Router от base.phpЯ получаю эту ошибку:

Fatal error: spl_autoload(): Class src\model\Router could not be loaded in /var/www/myweb/app/base.php on line 59

Я считаю, что мои пути верны, может быть, я что-то забыл. Автозагрузчик работает, когда я «использую» «пространства имен» из других классов, но не когда я использую его из простого php-файла.

Структура следующая:

myweb
|- app/
|   |-- view/
|   |   |-- login.php
|   |-- base.php
|
|- src/
|   |-- controller/
|   |   |-- AccessController.php
|
|- model/
|   |-- Router.php
|
|- index.php
|- .htaccess

PD:

  • Я знаю, что должен санировать запросы GET, но это только пример.
  • Спасибо вам за помощь 🙂

0

Решение

Я немного изменил spl_autoload_register

spl_autoload_register(
function($className) {
// echo "register: " . $className . "<br>\n";
$fileName = __DIR__ . '/' .  str_replace('\\', '/', $className) . ".php";
// $fileName = __DIR__ . '\\' .  $className . ".php"; // for windows
if(file_exists($fileName))
{
require_once($fileName);
}
else
{
echo "$fileName not found<br>\n";
}
}
);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]