Symfony 4用户通过电子邮件搜索问题

时间:2018-09-19 13:18:26

标签: php symfony twig php-7 symfony4

我正在尝试通过电子邮件功能在页面管理员的仪表板中实现用户搜索。目前,我已经将一个值硬编码到$email变量中只是为了测试搜索是否有效。它确实找到了正确的用户,但是在树枝上没有显示任何内容。

执行{{dump()}}输出:array:2 [▼0 =>用户{#4745▼-id:5-    用户名:“ test_user” -plainPassword:null -password:    “ $ 2y $ 13 $ rGYteIrzifg9Dty.O5knOOCHQnzOtF.nZux8h1jc4sNbap5V7Xn0。” -电子邮件:    “ 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 :(得分:0)

使用instance

检查$ user
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 %}

答案 1 :(得分:0)

在树枝中,您假设结果是数组。为此,请使用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]);

答案 2 :(得分:0)

这最终通过以下步骤解决了:

  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>