@ParamConverter 注释找不到实体对象
Entity object not found by the @ParamConverter annotation
我在之前工作的控制器中遇到此错误。
我已经添加了一些新的控制器(具有不同的路由前缀)所以我猜错误可能来自生成的那些新路由,但是,老实说,我很困惑为什么这个错误会出现在一个控制器中已经很久没变了
这是我的控制器代码:
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
:
App\Entity\Contract object not found by the @ParamConverter annotation.
如果我添加一个@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}
我发现了错误,它与路由无关。
我为这个实体创建了一个新的 ContractRepository
class 和 copied/pasted 基本代码,结果是:
class ContractRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Client::class);
}
}
我正在向构造函数发送另一个实体 class,它应该是 Contract,而不是 Client.
我在之前工作的控制器中遇到此错误。
我已经添加了一些新的控制器(具有不同的路由前缀)所以我猜错误可能来自生成的那些新路由,但是,老实说,我很困惑为什么这个错误会出现在一个控制器中已经很久没变了
这是我的控制器代码:
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
:
App\Entity\Contract object not found by the @ParamConverter annotation.
如果我添加一个@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}
我发现了错误,它与路由无关。
我为这个实体创建了一个新的 ContractRepository
class 和 copied/pasted 基本代码,结果是:
class ContractRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Client::class);
}
}
我正在向构造函数发送另一个实体 class,它应该是 Contract,而不是 Client.