【问题标题】:Entity object not found by the @ParamConverter annotation@ParamConverter 注解找不到实体对象
【发布时间】:2022-01-09 01:42:17
【问题描述】:

我在以前工作的控制器中遇到此错误。

我添加了一些新的控制器(具有不同的路由前缀),所以我猜错误可能来自那些生成的新路由,但是,老实说,我很困惑这个错误怎么会出现在一个控制器中很久没变了。

这是我的控制器代码:

ContractController.php

/**
 * @Route("/contract")
 */
class ContractController extends AbstractController
{
    /**
     * @Route("/edit/{id}", name="contract_edit", methods={"GET","POST"})
     */
    public function edit(Request $request, DocumentManagerService $dm, EventDispatcherInterface $dispatcher, Contract $contract): Response
    {
}

访问/contract/edit/1234 时出现此错误:

@ParamConverter 注释未找到 App\Entity\Contract 对象。

如果我添加一个@ParamConverter 注释,像这样:

 * @ParamConverter("contract", options={"mapping": {"id"   : "id"}})

我得到同样的错误。同样的错误发生在同一控制器中的其他路由上,正如我所说的所有这些路由以前都在工作。

如果我在控制台中debug:router,我会得到以/contract 为前缀的路由命中,它们都在这个控制器中。

    contract_debug                     GET        ANY      ANY    /contract/debugcontract/show/{id}                                                 
    contract_debug_edit                GET|POST   ANY      ANY    /contract/debugcontract/edit/{id}                                                 
    contract_debug_renew               GET|POST   ANY      ANY    /contract/debugcontract/renew/{id}                                                
    contract_index                     GET        ANY      ANY    /contract/list                                                                    
    contract_new                       GET|POST   ANY      ANY    /contract/new/{client_id}                                                         
    contract_edit                      GET|POST   ANY      ANY    /contract/edit/{id}                                                               
    contract_add_payment               GET|POST   ANY      ANY    /contract/addpayment/{id}/{renew}/{cardid}                                        
    contract_payment_delete            GET        ANY      ANY    /contract/deletepayment/{id}                                                      
    contract_show                      GET        ANY      ANY    /contract/show/{id}                                                               
    contract_send_and_block            GET        ANY      ANY    /contract/send/{id}                                                               
    contract_protect                   GET        ANY      ANY    /contract/protect/{id}/{protect}                                                  
    contract_generate_invoice          GET        ANY      ANY    /contract/invoice/{id}/{send}

【问题讨论】:

标签: symfony routes


【解决方案1】:

我发现了错误,它与路由无关。

我为此实体创建了一个新的ContractRepository 类,并复制/粘贴了基本代码,结果如下:

class ContractRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Client::class);
    }
}

我正在向构造函数发送另一个实体类,它应该是 Contract,而不是 Client

【讨论】:

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