如何从 Silex 中的 url 获取参数

How to get a parameter from a url in Silex

我正在尝试从 Silex 应用程序中的 url 获取参数。

这是我的控制器的连接方法:

public function connect(Application $app)
{
    $controllers = $app['controllers_factory'];

    $controllers->get('/list/pois/{id}', array($this, 'actionPoisList'))
        ->before(array($this, 'controlerAuthentification'));

    return $controllers;
}

这里我试图通过这样做来捕捉这个参数:

/**
 * @param Application $app
 * @return \Symfony\Component\HttpFoundation\JsonResponse
 */
public function actionPoisList(Application $app){

    return $app->json($app->escape($app['id']));
}

显然,它不起作用,所以请使用任何替代方案。谢谢

如果您在参数列表中指定 URL 中的参数,它们将自动传递到您的控制器路由中:

/**
 * @param Application $app
 * @return \Symfony\Component\HttpFoundation\JsonResponse
 */
public function actionPoisList(Application $app, $id){

    return $app->json($app->escape($id));
}

考虑到路由参数和函数参数的命名要完全一致

这通常被称为 url 弹头,silex 文档将其考虑在内 here

基本上你只需在你的路由解析到的函数中传递变量

$app->get('/blog/{id}', function (Silex\Application $app, $id) {
  // access $id here
})

对于不太熟悉 Silex 框架的人,我认为在控制器动作的签名中包含参数会模糊其来源。

我个人更喜欢不将它包含在方法的签名中,而是通过请求对象检索它,这突出了参数包含在路由中的事实。这可以通过 attribute 属性:

public function actionPoisList(Request $request) {
    $id = $request->attributes->get('id');
}