Искать в Système Symfony

Здравствуйте, я хотел бы создать систему поиска в своем блоге, только вот она не работает! Я сделал этот код, у меня ошибка такого типа:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

Если у вас есть решение для меня, это будет хорошо, спасибо вам большое! мой код:

/**
 * @Route("/recherche")
 * @param Request $request
 * @return Response
 */
public function search(Request $request): Response
{

    $info = $this->getDoctrine()->getRepository(InfoMore::class)->findByInfo(2);


    $form = $this->createForm(SearchType::class);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        $contentOfUsers = $form->getData();

        $contentOfUsers['name'];

        $search = $this->getDoctrine()->getRepository(Articles::class)->findBysearch($contentOfUsers);

        return $this->render('backOffice/search/resultat.html.twig', [
            'resultatOfSearch' => $search,
            'info' => $info
        ]);

    }

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

мой formType:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, [
                'attr' => [
                    'maxlength' => '30',
                    'minlength' => '3',
                    'label' => 'nom'
                ],
                'constraints' => [ new Assert\Length([
                    'min' => '2',
                    'minMessage' => 'Votre nom doit contenir au minimum {{ limit }} caractères.',
                    'max' => '30',
                    'minMessage' => 'Votre nom ne doit pas dépasser {{ limit }} caractères.'
                ])]
            ])
        ;
    }

Мой репозиторий:

/**
 * @param $contentOfUsers
 * @return array
 * @throws \Exception
 */
public function findBysearch(array $contentOfUsers) {
    $query = $this->createQueryBuilder('r')
        ->select('r')
        ->where('r.nameArticle LIKE :chaine')
        ->setParameter(':chaine', $contentOfUsers)
        ->getQuery();

    return $query->getResult();

}

мои взгляды:

{{ form_start(form) }}

    {{ form_label(form) }}
    {{ form_widget(form) }}

<button class = "btn btn-outline-success my-2 my-sm-0" type = "submit">Search</button>

{{ form_end(form) }}

и результат:

{% for search in resultatOfSearch %}

    {{ search.resultatOfSearch }}

{% endfor %}

ContentOfUsers должен быть массивом названий статей? В вашем контроллере есть строка $ contentOfUsers ['name']; -> Что это за фиг? Не должно быть $ contentOfUsers = $ contentOfUsers ['name'], а затем вы передаете это имя в rep и ищете статью с тем же именем, используя = not like?

revengeance 15.07.2018 00:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
59
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В вашем репозитории вам не нужно указывать : в методе setParameter.

Замените строку этой:

->setParameter('chaine', $contentOfUsers)

Вы можете проверить официальная доктринальная документация на привязку параметров.

Спасибо за ответ, но это все еще не работает! Это возвращает мне ту же ошибку

Crown Backend 14.07.2018 17:21
Ответ принят как подходящий

Попробуйте этот синтаксис в findBysearch

$queryBuilder = $this->createQueryBuilder('r');
$queryBuilder->select('r')
      ->where($queryBuilder->expr()->like('r.nameArticle', ':chaine'))
      ->setParameter('chaine', '%' . $contentOfUsers . '%');
$query = $queryBuilder->getQuery();

return $query->getResult();

Я пропустил; в конце. Это было?

Dimitris 15.07.2018 01:02

Нет-нет-нет, первый аргумент setParameter не нужен: вам нужно использовать: only в операторе where.

revengeance 15.07.2018 11:35

Я исправил параметр, как указал rev. Изменилась ли ошибка при использовании приведенного выше кода?

Dimitris 15.07.2018 17:53

Я первый убрал где. Я забыл это там. Также попробуйте добавить подстановочный знак% до и после текста поиска. Я внес изменения в приведенный выше код

Dimitris 16.07.2018 10:26

Вы пытаетесь запросить весь массив вместо одного значения в

public function findBysearch(array $contentOfUsers) {

Попробуйте изменить его так, чтобы ваш аргумент был единственным значением. Вы можете установить параметр в вашем контроллере, например, $value = $contentOfUsers['name'];, а затем

public function findBysearch($value) {
$query = $this->createQueryBuilder('r')
    ->select('r')
    ->where('r.nameArticle LIKE :value')
    ->setParameter('value', $value)
    ->getQuery();

return $query->getResult();
}

Спасибо за вашу помощь, работает, но у меня нет результата в моих взглядах, которые у меня есть в результате

Crown Backend 15.07.2018 15:48

@CrownBackend, извините, но я не понимаю, что вы имеете в виду.

Dirk J. Faber 15.07.2018 15:59

Спасибо за ответ, но ваше решение у меня не работает, результата нет! У меня нет ошибки, но нет результата, который отображается в моем представлении

Crown Backend 15.07.2018 16:00

В вашем контроллере вы должны установить переменную для $contentOfUsers['name'] (например, $value = $contentOfUsers['name'];), а затем вызвать эту переменную в своем запросе следующим образом: ->findBysearch($value). Все это в вашем контроллере.

Dirk J. Faber 15.07.2018 16:05

Спасибо за ответ. У меня в контроллере такие же вещи, но нет результата.

Crown Backend 15.07.2018 16:18

Если вы ищете не точное имя, а его часть, вы можете поместить это в свое репо: ->setParameter('value', '%'.$value.'%')

Dirk J. Faber 15.07.2018 16:22

У меня ошибка этого типа = Неверный параметр: значение токена не определено в запросе

Crown Backend 15.07.2018 16:26

Я предполагаю, что это связано с тем, что для начала в форму не было введено никакой информации. Итак, над вашим «если форма действительна» и т. д. Поместите $value = null.

Dirk J. Faber 15.07.2018 16:37

Здесь ? : $ form = $ this-> createForm (SearchType :: class); $ form-> handleRequest ($ запрос); $ значение = ноль; if ($ form-> isSubmitted () && $ form-> isValid ()) {

Crown Backend 15.07.2018 17:57

Да где угодно до формы.

Dirk J. Faber 15.07.2018 18:00

Когда я удаляю "return $ query-> getResult ();" в репозитории Это работает, но это не дает мне результата

Crown Backend 15.07.2018 18:06

Другие вопросы по теме