Поиск пользователей Symfony 4 по электронной почте

Я пытаюсь реализовать функцию поиска пользователя по электронной почте на панели администратора страницы. В настоящее время я жестко запрограммировал значение в переменную $email, чтобы проверить, работает ли поиск. Он находит нужного пользователя, но ничего не отображает в ветке.

Выполнение {{ dump() }} выводит: array:2 [▼ 0 => User {#4745 ▼ -id: 5 - имя пользователя: "test_user" -plainPassword: null -password: "$2y$13$rGYteIrzifg9Dty.O5knOOCHQnzOtF.nZux8h1jc4sNbap5V7Xn0 ." -email: "[email protected]" } "app" => AppVariable {#2617 ▶} ]

функция, которую я использую в AdminController.php:

/**
 * @Route("/admin/result", name="user_search")
 * Method({"POST"}) 
 */       
    public function user_search(Request $request)
    {
        $email = '[email protected]';

        $result = $this->getDoctrine()
            ->getRepository(User::class)
            ->findOneBy(['email' => $email]);

        if ($result) {

        return $this->render('admin/result.html.twig',  $result);    

        }else{

        return $this->render('admin/result.html.twig', [
            'error' => 'No user found with this email '.$email]);

    }}

результат.html.twig:

{% extends 'base.html.twig' %}

{% block body %}

{% if error %}
        <span class="error">{{ error }}</span>
{% endif %}

{% if result %}
            <table>
                <tr>
                    <th>Username</th><th>Email</th>
                </tr>
                {% for item in result %}

                    <tr>
                    <td>{{ item.getUsername }}</td><td>{{ item.getEmail }} 
                    </td>
                    </tr>
                {% endfor %}
                </table>
            {% endif %}
            {{ dump() }}
{% endblock %}

person minderazu    schedule 19.09.2018    source источник
comment
Попробуйте с {%, если результат определен %}   -  person AnTrakS    schedule 19.09.2018
comment
@D.Dimitrov Спасибо, это решает одну часть проблемы. Теперь я получаю визуализацию ветки, но, по-видимому, $result всегда не определен.   -  person minderazu    schedule 19.09.2018
comment
Не могли бы вы отредактировать или опубликовать, что выводит {{ dump() }} в вашем файле twig?   -  person AnTrakS    schedule 19.09.2018
comment
@D.Dimitrov вывод dump(): массив: 2 [▼ ошибка => Пользователь не найден с этим приложением [email protected] электронной почты => AppVariable {# 2617 ▶} ]   -  person minderazu    schedule 19.09.2018
comment
Если вы включили режим отладки, могли бы вы посмотреть, какие именно запросы готовятся к базе данных? Или какие ошибки у вас есть?   -  person AnTrakS    schedule 19.09.2018
comment
@D.Dimitrov, извините, у меня была опечатка в переменной $email. Он находит нужного пользователя, но ничего не отображает в ветке. array:2 [▼ 0 => User {#4745 ▼ -id: 5 -username: test_user -plainPassword: null -password: $2y$13$rGYteIrzifg9Dty.O5knOOCHQnzOtF.nZux8h1jc4sNbap5V7Xn0. -email: [email protected] } app => AppVariable {# 2617 ▶} ]   -  person minderazu    schedule 19.09.2018


Ответы (3)


В twig вы предполагаете, что результатом является массив. Для этого используется findBy вместо findOneBy. findBy возвращает массив объектов с нужным поиском. findOneBy возвращает только объект с желаемым поиском или null, если результаты не найдены.

Пример:

// look for a single User by email
$result = $this->getDoctrine()
            ->getRepository(User::class)
            ->findOneBy(['email' => $email]);

// look for multiple User objects matching the email
$result = $this->getDoctrine()
                ->getRepository(User::class)
                ->findBy(['email' => $email]);
person D. Pinheiro    schedule 19.09.2018

Это было окончательно решено следующими шагами:

  1. В жестко заданной переменной $email была опечатка.
  2. Изменено return $this->render('admin/result.html.twig', 'result'->$result); вместо return $this->render('admin/result.html.twig', $result);
  3. Изменено <td>{{ item.username }}</td><td>{{ item.email }}</td> вместо <td>{{ result.getUsername }}</td><td>{{ result.getEmail }}</td>
person minderazu    schedule 19.09.2018

Проверить $user с помощью instance

if ($result instanceof User)
.......................................................................

Я предлагаю вам использовать defined в ветке

{% if result is defined %}
{% extends 'base.html.twig' %}

{% block body %}

    {% if error is defined %}
        <span class="error">{{ error }}</span>
    {% else %}
        <table>
            <tr>
                <th>Username</th><th>Email</th>
            </tr>
            {% for item in result %}

              <tr>
                 <td>{{ result.getUsername }}</td><td>{{ result.getEmail }}</td>
              </tr>
            {% endfor %}
        </table>
    {% endif %}

{% endblock %}
person Imanali Mamadiev    schedule 19.09.2018
comment
Спасибо, это решает одну часть проблемы. Теперь я получаю визуализацию ветки, но, по-видимому, $result всегда не определен. - person minderazu; 19.09.2018
comment
Вы имели в виду ($result instanceof User)? - person minderazu; 19.09.2018
comment
instanceof не является функцией ветки. - person mblaettermann; 20.09.2018
comment
Я писал для twig? )) - person Imanali Mamadiev; 20.09.2018