在我的控制器中调用方法时,我遇到了 Symfony 中
@ParamConverter
注释的问题。我面临的具体错误是: App\Entity\Recipe
注释未找到 @ParamConverter
对象。'
我的
findPublicRecipe()
中有一个 RecipeRepository
方法。此方法应该根据可选参数 $nbRecipes
获取公共食谱。这是有问题的方法。
function findPublicRecipe(?int $nbRecipes): array
{
$queryBuilder = $this->createQueryBuilder('r')
->where('r.isPublic = 1')
->orderBy('r.createdAt', 'DESC');
if ($nbRecipes !== 0 && $nbRecipes !== null) {
$queryBuilder->setMaxResults($nbRecipes);
}
return $queryBuilder->getQuery()->getResult();
}
我在控制器中调用此
findPublicRecipe()
方法,而不使用 @ParamConverter
注释。这是我的控制器的代码:
#[Route('/recipe/public', name: 'recipe.index.public', methods: ['GET'])]
public function indexPublic(
RecipeRepository $repository,
Request $request,
PaginatorInterface $paginator,
): Response {
$recipes = $repository->findPublicRecipe(null);
$recipes = $paginator->paginate(
$recipes,
$request->query->getInt('page', 1),
10
);
return $this->render('pages/recipe/indexPublic.html.twig', [
'recipes' => $recipes
]);
}
尽管如此,我仍然收到上述错误。我已检查
Recipe
实体是否已正确导入到我的控制器中,并且命名空间路径是否正确。此外,我还验证了 Recipe
实体是否已正确定义并且注释是否正确。谁能帮我理解为什么会发生这个错误以及如何修复它?
需要验证的一件事是,在这个静态路由之前没有定义动态路由。我没有看到整个控制器类,但我怀疑动态路由(例如
#[Route('/recipe/{id}')]
可能比相关路由更早定义。然后,该动态路由会更早匹配,并可能返回您正在处理的“未找到”响应与.
此外,您可能想查看 #[MapEntity] 属性的 表达式选项,它允许您指定 EntityValueResolver 使用的函数将值注入路由参数。