解决 Symfony 中的 @ParamConverter 问题

问题描述 投票:0回答:1

在我的控制器中调用方法时,我遇到了 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
实体是否已正确定义并且注释是否正确。谁能帮我理解为什么会发生这个错误以及如何修复它?

php doctrine query-builder symfony6 symfony-routing
1个回答
0
投票

需要验证的一件事是,在这个静态路由之前没有定义动态路由。我没有看到整个控制器类,但我怀疑动态路由(例如

#[Route('/recipe/{id}')]
可能比相关路由更早定义。然后,该动态路由会更早匹配,并可能返回您正在处理的“未找到”响应与.

此外,您可能想查看 #[MapEntity] 属性的 表达式选项,它允许您指定 EntityValueResolver 使用的函数将值注入路由参数。

© www.soinside.com 2019 - 2024. All rights reserved.