当然,您可以在控制器中执行此操作:
$entities = (isset($pid))
? $em->getRepository('AcmePanduBundle:Checklist')->findByPid($pid)
: $em->getRepository('AcmePanduBundle:Checklist')->findAll();
但是,这是自定义存储库的用途。如果您计划在多个地方复制此逻辑,我肯定会创建一个。
它看起来像:
// src/Acme/PanduBundle/Repository/ChecklistRepository.php
namespace Acme\PanduBundle\Repository;
use Doctrine\ORM\EntityRepository;
class ChecklistRepository extends EntityRepository
{
public function findAllWithOptionalPid($pid = null)
{
if($pid)
return $this->findByPid($pid);
return $this->findAll();
}
}
...并且不要忘记在您的 Doctrine 配置中引用此存储库。不知道您使用什么方法进行配置(xml、yml、注释),但这里的文档:http ://symfony.com/doc/current/book/doctrine.html#custom-repository-classes
一旦完成,任何控制器调用$em->getRepository('AcmePanduBundle:Checklist')->findAllWithOptionalPid($pid);
都将按照您的预期工作,无论是否使用 $pid 变量。