截至此处: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);
答案 0 :(得分:0)
请调试这些功能(打印出$ user)。 然后,您将看到在第二部分中,您将名称变量$ user加倍,从而产生差异。
在第一个示例中,您使用DI容器,因此您应该将请求传递给它。