2012-11-12 131 views
0

大家好我想使用MicroFramework Silex創建我的網站的路由部分。我遇到的問題是,由於我不瞭解文檔,因此無法使其工作。使用Silex框架進行路由

我已經實現了所需的文件在我的文件樹,並添加一些代碼到index.php文件

這個代碼如下:

$app = new Silex\Application(); 

$app->post('/web/{slug}', __DIR__.'/Controller/PostsController::showPost()'); 

$app->run(); 

我還創建了一個名爲控制器與目錄其中的PostsController類。但現在我不知道如何繼續有人可以給我一個簡單的例子,說明如何創建一個動態路由,與我的導航類一起工作?

回答

2

您正在混合filepath和類名稱/回調函數。傳遞給post/get/match方法的第二個參數必須是一些可以解決,可調用的,所以它可以lambda函數,對象/類和方法名或函數/類::方法字符串數組,即:

//Lambda 
$app->get('/web/{slug}', function(){ 
     return \MyNamespace\Controler\PostControler::showPost(); 
    } 
);  

//Static call 
$app->get('/web/{slug}', array('\\MyNamespace\\Controler\\PostControler','showPost')); 

//Object call 
$myCtrl = new \MyNamespace\Controler\PostControler(); 
$app->get('/web/{slug}', array($myCtrl,'showPost')); 

//Function 
function showPost(){ 
    return \MyNamespace\Controler\PostControler\showPost(); 
} 
$app->get('/web/{slug}', 'showPost'); 

//Both static and not methods 
$app->get('/web/{slug}', '\\MyNamespace\\Controler\\PostControler::showPost'); 

創建您自己的命名空間時,remember to add them to autoloader

+0

這是最正確的,但控制器不是可調用的。這是一個可以解析爲可由控制器解析器調用的值。這意味着最後一個例子適用於靜態和非靜態方法。控制器解析器檢測兩種情況併爲非靜態方法創建實例。這是我通常會建議的任何一種方式。 – igorw