Symfony entityManager findBy()错误

时间:2018-05-01 08:59:30

标签: php symfony doctrine

我试图在我的视图中仅显示有效广告,但我收到错误:

  

无法猜测如何从参数“advert”的请求信息中获取Doctrine实例。

当我显示所有广告时,没有问题:

/**
 * @Route("/", name="advert_index")
 *
 * @return Response
 */
public function indexAction()
{
    $entityManager = $this->getDoctrine()->getManager();
    $adverts = $entityManager->getRepository(Advert::class)->findAll();

    return $this->render("Advert/index.html.twig", ["adverts" => $adverts]);
}

但是当我试图只显示有效广告时,我编码:

/**
 * @Route("/", name="advert_index")
 *
 * @param Advert $advert
 * @return Response
 */
public function indexAction(Advert $advert)
{
    $entityManager = $this->getDoctrine()->getManager();

    $adverts = $entityManager->getRepository(Advert::class)->findBy(["status" => $advert->getStatus() === Advert::STATUS_ACTIVE]);
    $adverts = $entityManager->getRepository(Advert::class)->findBy([$advert->getStatus() === Advert::STATUS_ACTIVE]);
    $adverts = $entityManager->getRepository(Advert::class)->findBy($advert->getStatus() === Advert::STATUS_ACTIVE);

    return $this->render("Advert/index.html.twig", ["adverts" => $adverts]);
}

这是我试过的3种方法。但它不起作用。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

您的问题是您的操作的方法签名:

public function indexAction(Advert $advert)

Doctrine ParamConverter尝试为您抓取广告,但由于路线本身没有{id},转换器无法识别要加载的广告。

由于您不希望删除参数的特定广告应该没问题:

public function indexAction() 
{
    ...
}

然后你可以将你的findBy方法改为:

findBy(['status' => Advert::STATUS_ACTIVE]);

这应该会为您提供所有有效的广告。