2016-05-17 38 views
0

嗨,自動加載磁帶機不是簡單的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 
    } 
} 

的事情是,當我需要從base.phpRouter,我得到此錯誤:

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請求,但是這僅僅是一個例子。
  • 謝謝你的幫助:)

回答

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"; 
     } 
    } 
); 
+0

你該死的權利!它工作完美。我添加在我的index.php的頂部。 –

相關問題