自动加载器无法在简单的 PHP 文件中工作,而不是 Class 文件
Autoloader not working in a simple PHP file, without being a Class file
嗨,
我正在使用一个简单的模型-视图-控制器结构,我真的是新手。我会告诉你上下文:
我的 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 代码,实例 a class 调用 Router
根据 控制器重定向请求 和 url 的 动作 。请注意,我正在使用 spl_autoload_register();
自动加载我的 classes.
app/base.php:
<!-- header code here -->
use src\model\Router;
$router = new Router();
$router->callView($controller, $action);
<!-- footer code here -->
src/model/Router.php:
namespace src\model;
class Router
{
function callView($controller, $action)
{
// code here that calls a controller to show a view
}
}
问题是,当我从 base.php
请求 Router
时,我得到这个错误:
Fatal error: spl_autoload(): Class src\model\Router could not be loaded in /var/www/myweb/app/base.php on line 59
我觉得我的路径是正确的,也许我忘记了什么。当我从其他 classes 'use' 'namespaces' 时,自动加载器工作,但当我从一个简单的 php 文件使用它时,自动加载器不工作。
结构如下:
myweb
|- app/
| |-- view/
| | |-- login.php
| |-- base.php
|
|- src/
| |-- controller/
| | |-- AccessController.php
|
|- model/
| |-- Router.php
|
|- index.php
|- .htaccess
PD:
- 我知道我必须清理 GET 请求,但这只是示例。
- 感谢您的帮助:)
我修改了 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";
}
}
);
嗨,
我正在使用一个简单的模型-视图-控制器结构,我真的是新手。我会告诉你上下文:
我的 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 代码,实例 a class 调用 Router
根据 控制器重定向请求 和 url 的 动作 。请注意,我正在使用 spl_autoload_register();
自动加载我的 classes.
app/base.php:
<!-- header code here -->
use src\model\Router;
$router = new Router();
$router->callView($controller, $action);
<!-- footer code here -->
src/model/Router.php:
namespace src\model;
class Router
{
function callView($controller, $action)
{
// code here that calls a controller to show a view
}
}
问题是,当我从 base.php
请求 Router
时,我得到这个错误:
Fatal error: spl_autoload(): Class src\model\Router could not be loaded in /var/www/myweb/app/base.php on line 59
我觉得我的路径是正确的,也许我忘记了什么。当我从其他 classes 'use' 'namespaces' 时,自动加载器工作,但当我从一个简单的 php 文件使用它时,自动加载器不工作。
结构如下:
myweb
|- app/
| |-- view/
| | |-- login.php
| |-- base.php
|
|- src/
| |-- controller/
| | |-- AccessController.php
|
|- model/
| |-- Router.php
|
|- index.php
|- .htaccess
PD:
- 我知道我必须清理 GET 请求,但这只是示例。
- 感谢您的帮助:)
我修改了 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";
}
}
);