我正在使用symfony 3.2构建一个小型网站。
有一个页面,用户可以使用表单更改其个人资料数据。我使用了official tutorial中看到的结构。这是我的控制器的声明:
/** @Route("/profil", name="profil_show_user") */
public function userProfileAction(Request $request, UserInterface $user) {
if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
throw $this->createAccessDeniedException();
}
//...
$user->getProfile();//and do stuff
//...
}
我的问题是,如果用户因长时间处于非活动状态而断开连接,或者有人将该页面加入书签但未连接,我会发出这个丑陋的错误:
控制器 “AppBundle \ Controller \ ProfilController :: userProfileAction()”需要 您为“$ user”参数提供了值。论证 可以为空,并且没有提供空值,没有默认值 已提供或因为此后有一个非可选参数 一。 500内部服务器错误 - RuntimeException
在New in Symfony 3.2更改日志中,有一些关于新用户值解析器的内容。我尝试更改为UserInterface $user = null
,它使页面重定向到我在security.yml的failure_path
中设置的路径,这是一个很好的行为。
但是如果我已经连接并转到profil_show_user
,我会收到其他错误:
错误:在null
上调用成员函数getProfile()
我彻底搜索了symfony文档但找不到任何内容。
有人可以向我解释出现了什么问题,我误解了什么以及如何才能使这项工作成功?
编辑:
我想我可能会说,如果我不使用te值解析器,一切正常。这是关于我无法使用的新功能的教育和好奇心问题。此代码有效:
/** @Route("/profil", name="profil_show_user") */
public function userProfileAction(Request $request) {
$user = $this->getUser();
if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
throw $this->createAccessDeniedException();
}
//...
$user->getProfile();//and do stuff
//...
}