Измените контроллер так, чтобы вы прочитали параметр term
из запроса и передали его в метод обслуживания:
/**
* @Route("/cities", name="city_list")
* @param Request $request
* @throws \Doctrine\Common\Annotations\AnnotationException
*/
public function getCityPaginatedAction(Request $request)
{
if(isset($this->data['offset'])){
$offset = $this->data['offset'];
}else {
$offset = 0;
}
if(isset($this->data['limit'])){
$limit = $this->data['limit'];
}else{
$limit = 20;
}
$term = $request->query->get('term');
$city = $this->get('city')->getCityPaginated($limit, $offset, $term);
return $this->success($city, ['city_data']);
}
Затем измените службу, чтобы использовать этот параметр в запросе
/**
* Return all schools from city
*
* @param int $limit
* @param int $offset
* @param string $text
* @return array
*/
public function getCityPaginated($limit = 20, $offset = 0, $term = null)
{
$queryBuilder = $this->getCityRepository()
->createQueryBuilder('c');
if ($term) {
$queryBuilder->andWhere($queryBuilder->expr()->like('c.name', :term)
->setParameter('term', "%" . $term . "%");
}
$query = $queryBuilder->getQuery();
return $this->container->get('paginator')->paginate($query, $offset, $limit);
}
Возможно, вы захотите изменить конструктор запросов и выполнить поиск и в других полях.