Autoloader无法在简单的PHP文件中工作,而不是类文件

时间:2016-05-17 18:17:20

标签: php class model-view-controller router autoload

您好,

我正在使用一个简单的模型 - 视图 - 控制器结构,我真的是新手。我会告诉你上下文:

我的index.php获取了网址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的类,根据控制器操作重定向请求的网址。请注意,我正在使用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的{​​{1}}时,我收到此错误:

base.php

我的道路是正确的,也许我忘了什么。当我从其他类中使用'名称空间'时,自动加载器会工作,但是当我从一个简单的php文件中使用它时,它就无法工作。

结构如下:

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

PD:

  • 我知道我必须清理GET请求,但这只是一个例子。
  • 感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

我修改了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";
        }
    }
);