如何将属性传递给Silex中的控制器转换器?

时间:2016-08-04 19:27:09

标签: php symfony controller silex

截至此处:http://silex.sensiolabs.org/doc/master/usage.html#route-variable-converters 我想将转换器定义为使用Doctrine ORM的服务。

如果我使用:

$app['converter.user'] = function ($user, Request $request) use ($em){
     print($request->attributes->get('user'));
     return new UserConverter($em);
};

$app->get('/user/{user}', function (Silex\Application $app, Request $request, $user) {
      return $app->json($user);
})
->convert('user', 'converter.user:convert');

'user'属性在服务中不可用,我收到错误:

Fatal error: Call to a member function get() on null

但是如果我使用下面的变量代替服务,那么属性'user'工作正常!我上面做了什么错?我需要传递'user'属性的值才能传递给convert()类的UserConverter()方法,我该如何从上面的服务中这样做?

$user = function ($user, Request $request) use ($em){
        print($request->attributes->get('user'));
        return new UserConverter($em);
};
$app->get('/user/{user}', function (Silex\Application $app, Request $request, $user) {
      return $app->json($user);
})
->convert('user', $user);

1 个答案:

答案 0 :(得分:0)

请调试这些功能(打印出$ user)。 然后,您将看到在第二部分中,您将名称变量$ user加倍,从而产生差异。

在第一个示例中,您使用DI容器,因此您应该将请求传递给它。