【问题标题】:Access control configuration throws "App\Entity\PatientOrder object not found by the @ParamConverter annotation." error访问控制配置抛出“@ParamConverter 注释未找到 App\Entity\PatientOrder 对象。”错误
【发布时间】:2019-09-24 01:18:56
【问题描述】:

我正在尝试将访问控制配置为需要身份验证才能访问我的 Web 应用程序的任何页面。但是在我的控制器中设置主页路由后出现错误。

Security.yaml

access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_USER }

PatientOrderController.php

    /**
     * @Route("/", name="patient_order_index", methods={"GET"})
     * @param PatientOrderRepository $patientOrderRepository
     * @return Response
     */
    public function index(PatientOrderRepository $patientOrderRepository)
    {
        return $this->render('oncomine/patient_order/index.html.twig', [

            'patient_orders' => $patientOrderRepository->getPatientsWIthOrders()
        ]);
    }

【问题讨论】:

    标签: symfony


    【解决方案1】:

    那不是访问控制抛出的错误。

    在您的 index 函数中有一个参数“PatientOrderRepository $patientOrderRepository”。 Symfony 正在尝试获取实体,但您的路由似乎没有任何 ID 可供使用,因此 @ParamConverter 会抛出找不到实体的错误。

    也许你的 yml 路由配置中设计了一些 ID,但是那里没有 id 占位符,所以 ParamConverter 仍然会抛出异常。如果您在路由器配置中使用某种 patientId 作为占位符,那么您需要在 ParamConverter 定义中指定映射。参考link

    【讨论】:

    • 谢谢,我可能应该换个说法。我在配置访问控制并尝试在未登录的情况下访问该页面后收到此错误。如果禁用它并登录,我不会收到此错误。
    • 开启 ACL 并从索引函数定义中删除参数 PatientOrderRepository $patientOrderRepository$patientOrderRepository->getPatientsWIthOrders() 替换为 [ ] - 你会有什么错误吗?
    • 我想通了——我有两条与注销 URL 匹配的路由——一条是 /,另一条是 /{id}——所以它调用了后者并抛出了错误。感谢您的帮助。
    【解决方案2】:

    这原来是一个路由错误 - 注销按钮被配置为指向 app_logout 但是,它在到达我的 / 路由之前访问了我设置为 /{id} 的路由。所以它试图显示一个与我预期完全不同的页面。

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 2019-01-02
      • 2017-08-11
      • 2022-01-09
      • 2017-06-27
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多