Поиск пользователей Symfony 4 по электронной почте - PullRequest
0 голосов
/ 19 сентября 2018

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

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

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

/**
 * @Route("/admin/result", name="user_search")
 * Method({"POST"}) 
 */       
    public function user_search(Request $request)
    {
        $email = 'tester@test.com';

        $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]);

    }}

result.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 %}

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

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

Пример:

// 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]);
0 голосов
/ 19 сентября 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>
0 голосов
/ 19 сентября 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 %}
...