2012-11-12 87 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