2015-02-23 48 views
3

我對命名空間還很陌生,很想弄清楚如何使用它們。我正在使用Silex Microframework並嘗試設置我的文件夾結構。到目前爲止,我有:Silex命名空間

cms/ 
    ACP/ 
    Controller/ 
     HomeController.php 
    View/ 
    Front/ 
    Controller/ 
     HomeController.php 
    View/ 
     Template/ 
     page.php 
     home.php 
    app.php 
    bootstrap.php 

我想加載HomeController在Front/Controller文件夾中。在我的app.php文件中,我打電話給家裏的控制器。

require_once __DIR__.'/../vendor/autoload.php'; 

$app = new Silex\Application(); 
$app['debug'] = true; 

$app->get("/", "cms\Front\Controller\HomeController::index"); 
$app->get('/test', function() { 
    return new Symfony\Component\HttpFoundation\Response("Test successful"); 
}); 

return $app; 

如果我在瀏覽器中使用/test,它工作正常。但是,當我去/然後我得到一個錯誤。

InvalidArgumentException在ControllerResolver.php線153:

類 「CMS \前\控制器\ HomeController的」 不存在。

我定義cms在composer.json和HomeController的命名空間我有

<?php namespace cms\Front\Controller; 

class HomeController { 

    public function index() { 
     return "Hello World, I'm the front page!"; 
    } 

} 

我也試過直接移動HomeController.php文件到cms目錄,改變了名稱空間文件只是cms,然後運行$app->get("/", "cms\HomeController::index");,它仍然無法正常工作。我得到了不存在的相同錯誤。

這裏是我的作曲文件:

{ 
    "require": { 
     "silex/silex": "~1.1", 
     // ...other requirements 
    }, 
    "require-dev": { 
     "symfony/var-dumper": "dev-master" 
    }, 
    "autoload": { 
     "psr-0": { 
      "cms": "cms/" 
     } 
    } 
} 

什麼我需要做的就是這個工作?我似乎無法在Silex網站或Google上找到任何內容。有人可以幫助我讓我的頭在命名空間,以及這是如何工作?

+0

我不熟悉的Silex,但是從我的頭頂,當你prefi會發生什麼x在帶有反斜槓的'get()'方法中的第二個參數?例如。 '「\ cms \ Front \ Controller \ HomeController :: index」'我想知道它是否必須是完全限定的名稱。 – Crackertastic 2015-02-23 21:46:13

+0

沒什麼,沒有區別。 Silex建立在Symphony 2上,所以如果你熟悉它,它應該是相同的,或者非常相似。 – Styphon 2015-02-23 21:47:51

回答

6

您需要將源文件夾添加到作曲家自動加載(https://getcomposer.org/doc/01-basic-usage.md#autoloading

"autoload": { 
    "psr-4": {"Acme\\": "./"} 
} 

在你的情況的路徑「./」應該工作(沒有測試),如果你不應該試圖把cms文件夾到像src一個文件夾,並設置路徑「的src /」

記住運行composer dump-autoload再生autoload.php

+0

我們走了,就是這樣。我發現的代碼是使用psr-0,而不是psr-4。我將其從0更改爲4,它工作。謝謝。 – Styphon 2015-02-23 22:13:23