Symfony создать форму поиска - PullRequest
0 голосов
/ 23 октября 2018

Я обращаюсь к вам за помощью, пожалуйста, потому что я хочу сделать форму поиска, но я блокирую на контроллере

Мои вопросы, как сделать форму в get?

Я делюсьВы мой код

мой контроллер:

/**
 * @Route({"fr": "/recherche/search/?value={value}&region={region}&category={category}",
 *         "en": "/search/",
 *         "es": "/buscar/"}, name="search", methods="GET")
 * @param Request $request
 * @param string $value
 * @param string $region
 * @param string $category
 * @return Response
 * @throws \Exception
 */
public function searchAction(Request $request, string $value, string $region, string $category): Response
{
    $form = $this->createForm(SearchType::class);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid())
    {
        $value = $form->getData()->getTitle();
        $search = $this->getDoctrine()->getRepository(Advertisement::class)->findBySearch($value, $region, $category);

        return $this->render('search/result.html.twig', [
            'results' => $search
        ]);
    }
    return $this->render('search/search.html.twig', [
        'form' => $form->createView()
    ]);

}

в моем хранилище мне нужен этот запрос:

SELECT * FROM `advertisement` 
WHERE category_id = 7 
    AND region_id = 1 
    AND title LIKE '%iph%' 
    OR description LIKE 'test'

мой хранилище:

/**
 * @return Advertisement|null
 * @param string $value
 * @param $region
 * @param $category
 * @throws \Exception
 */
public function findBySearch(string $value, $region, $category)

{
    $query = $this->createQueryBuilder('a')
    ->addSelect('a')
    ->where('a.category = :category')
    ->andWhere('a.region = :region')
    ->andWhere('a.title LIKE :value')
    ->orWhere('a.description LIKE :value')
    ->setParameter(':value', $value)
    ->setParameter(':region', $region)
    ->setParameter(':category', $category)
    ->getQuery();

    try {
        return $query->getResult();
    }
    catch(\Exception $e) {
        throw new \Exception('problème '. $e->getMessage(). $e->getFile());
    }
}

спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

попробуйте, я предполагаю, что регион и категория - это антиты

/**
 * @Route({"fr": "/recherche/search/?value={value}&region={region}&category={category}",
 *         "en": "/search/",
 *         "es": "/buscar/"}, name="search", methods="GET")
 * @param Request $request
 * @param string $value
 * @param string $region
 * @param string $category
 * @return Response
 * @throws \Exception
 */
public function searchAction(Request $request, string $value, Region $region, category $category): Response
{
    $form = $this->createForm(SearchType::class, null, [
        'method' => 'GET'
    ]);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid())
    {
        $value = $form->getData()->getTitle();
        $search = $this->getDoctrine()->getRepository(Advertisement::class)->findBySearch($value, $region, $category);

    return $this->render('search/result.html.twig', [
        'results' => $search
    ]);
}
return $this->render('search/search.html.twig', [
    'form' => $form->createView()
]);

}

public function findBySearch(string $value, Region $region, Category $category)

{
return $this->createQueryBuilder('a')
    ->where('a.category = :category')
    ->andWhere('a.region = :region')
    ->andWhere('a.title LIKE :value')
    ->orWhere('a.description LIKE :value')
    ->setParameters([
        'value' => $value,
        'region' => $region,
        'category' => $category
    ])
    ->getQuery()
    ->getResult();

    }
0 голосов
/ 23 октября 2018

Вы можете установить метод формы при его создании (https://symfony.com/doc/current/form/action_method.html), попробуйте что-то вроде этого

...    
public function searchAction(Request $request, string $value, string $region, string $category): Response
{
   $form = $this->createForm(SearchType::class, ['method' => Request::METHOD_GET]);
   $form->handleRequest($request);
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...