Привет,
Я использую простую структуру модель-представление-контроллер, и я действительно новичок в этом. Я покажу вам контекст:
мой 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:
Я немного изменил 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";
}
}
);
Других решений пока нет …