php - 交响乐 4 |访问使用传统用户表单传递的用户名(来自 doc)

标签 php symfony

我正在学习 https://symfony.com/doc/current/security/form_login_setup.html 上的教程我想访问用户名。我想让 session 存储用户名,但我不知道如何捕获登录用户的用户名。

到目前为止,我已经在 SecurityController 中尝试了 $username = $request->get('username'); 然后尝试将 session 'username' 键设置为 $username 但它不起作用。

SecurityController.php

<?php
/**
 * Created by PhpStorm.
 * User: Adrian
 * Date: 2018-01-29
 * Time: 11:02
 */

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\Routing\Annotation\Route;

class SecurityController extends Controller
{
    /**
     * @Route("/panel/login", name="login")
     */
    public function login(Request $request, AuthenticationUtils $authUtils) {
        $error = $authUtils->getLastAuthenticationError();
        $lastUsername = $authUtils->getLastUsername();

        return $this->render('security/login.html.twig', array(
            'last_username' => $lastUsername,
            'error'         => $error,
        ));
    }

}

login.html.twig

{% block body %}
    {% if error %}
        <div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
    {% endif %}

    <form action="{{ path('login') }}" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="_username" value="{{ last_username }}" />

        <label for="password">Password:</label>
        <input type="password" id="password" name="_password" />

        <input type="hidden" name="_target_path" value="/panel/dashboard"/>
        {#
            If you want to control the URL the user
            is redirected to on success (more details below)
            <input type="hidden" name="_target_path" value="/account" />
        #}

        <button type="submit">login</button>
    </form>
{% endblock %}

稍后我想像这样访问这个用户名:

$session = $request->getSession();
$username = $session->get('username');

最佳答案

如果用户成功登录,您可以使用 $this->getUser()->getUsername()(无论您的 getter 是什么样子)在 Controller 中获取用户名。

如果用户没有成功登录,你可以创建一个 Doctrine 实体并保留失败的尝试,然后稍后调用该实体。这取决于你想用它做什么?

关于php - 交响乐 4 |访问使用传统用户表单传递的用户名(来自 doc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48501573/

相关文章:

基于先前选择的 PHP 选择

php - 带有逗号分隔值的 Codeigniter Mysql 列

php - Symfony,动态路由

php - 打包和部署 Symfony 网站

php - 如何从远程数据库查询信息,PHP/MySQL

php - 将十进制值存储在 MySql 中的十进制字段中

php - 没有模型 [App\Models\Match] 的查询结果

php - "Missing Service"在symfony中声明新的Topic时

php - 如何在 monolog symfony2 日志记录中禁用 security.info 和 security.debug

php - 读取外部文件以在 Symfony 5 中配置 Doctrine