Наши контроллеры в нашем приложении Symfony часто должны фильтровать результаты запроса, прежде чем передать результаты в шаблон представления. Каков наилучший способ фильтрации этих результатов запроса. На данный момент у нас часто бывает что-то вроде этого:
public function indexAction()
{
$form = $this->getFilterForm();
$repository = $this->getDoctrine()->getRepository(...);
$queryBuilder = $repository->createQueryBuilder('q');
if ($name = $form->get('name')->getData()) {
$queryBuilder
->andWhere('q.name = :name')
->setParameter('name', $name);
}
if ($birthday = $form->get('birthday')->getData()) {
$queryBuilder
->andWhere('q.name = :name')
->setParameter('name', $birthday);
}
return array(
'result' => $queryBuilder->getQuery()->getResult()
);
}
На мой взгляд, это не должно быть частью контроллера. С другой стороны, я думаю, что помещение всего этого в класс репозитория для этого типа сущности может привести ко многим filter*
методы для нескольких проблем.
У кого-нибудь есть лучшая практика для того или иного умного представления, где разместить методы фильтрации или как обрабатывать фильтрацию данных?
Задача ещё не решена.
Других решений пока нет …