如何在Symfony 3.2中使用用户值解析器?

时间:2016-12-28 11:43:38

标签: symfony

我正在使用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
    //...
}

0 个答案:

没有答案