我對命名空間還很陌生,很想弄清楚如何使用它們。我正在使用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上找到任何內容。有人可以幫助我讓我的頭在命名空間,以及這是如何工作?
我不熟悉的Silex,但是從我的頭頂,當你prefi會發生什麼x在帶有反斜槓的'get()'方法中的第二個參數?例如。 '「\ cms \ Front \ Controller \ HomeController :: index」'我想知道它是否必須是完全限定的名稱。 – Crackertastic 2015-02-23 21:46:13
沒什麼,沒有區別。 Silex建立在Symphony 2上,所以如果你熟悉它,它應該是相同的,或者非常相似。 – Styphon 2015-02-23 21:47:51