如何从 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');
}
我正在尝试从 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');
}