2015-04-15 24 views
4

在我命名空間我的應用程序(測試應用程序)之前,一切工作正常。 但之後我就開始命名空間控制器,一切都和裝載這樣的命名空間:PhalconPHP - 如果它們與Loader命名空間無法加載控制器

$loader = new Loader(); 
    $loader->registerNamespaces(
     array(
      'Application\Controllers' => 'Application/Controllers/' 
     ) 
    )->register(); 

我得到的錯誤Exception: IndexController handler class cannot be loaded

我進入我的命名空間是正確的:

namespace Application\Controllers; 

use Phalcon\Mvc\Controller; 

class IndexController extends Controller { 

    public function indexAction() { 
     echo "Hello World"; 
    } 
} 

img http://gyazo.com/c7895dbf51b37d6410c0dc8f5ec2cbb2.png

我設法通過向路由器添加默認命名空間來修復它:

$router = new Router(); 
$router->setDefaultNamespace('Application\Controllers'); 

但是這可能會導致我更多的問題,因爲名稱空間加載器似乎不工作。

出了什麼問題?

回答

4

沒有什麼不對,裝入程序和路由器中的名稱空間註冊都是必需的步驟。

在第一個實例中,您只配置了加載程序。所以如果你測試某處:

$controller = new Application\Controllers\IndexController(); 它會工作。

但是,您尚未告訴路由器您的所有路由應該指向Application\Controllers命名空間。所以它試圖找到\IndexController類,這確實是不存在的。

+0

好的答案,謝謝,不知道。 – Artemkller545

1

我想你只需要設置的命名空間的根,然後加載程序將做腳手架:

$loader = new Loader(); 
$loader->registerNamespaces(
    array(
     'Application' => 'Application' 
    ) 
)->register(); 

而且你確定你所得到的應用程序文件夾是否正確?請嘗試:

$loader = new Loader(); 
$loader->registerNamespaces(
    array(
     'Application' => '~/Application/' 
    ) 
)->register(); 
+0

是的文件夾是正確的,因爲它工作,如果我從控制器中刪除名稱空間。 – Artemkller545

相關問題