在 user_name 的占位符中获取错误值

Posted

技术标签:

【中文标题】在 user_name 的占位符中获取错误值【英文标题】:Getting wrong value in placeholder for user_name 【发布时间】:2021-11-05 08:31:46 【问题描述】:

我在 Symfony 中创建了一个用户个人资料页面。当我点击个人资料时,我需要查看 user_nameemailuser_image url。除了 user_name 之外,一切正常。而不是显示 name 而是再次显示 email...就像您在图片中看到的那样。当我尝试更改某些内容并保存更改时,所有内容都已更改并按预期保存,但再次只有电子邮件可见。 Profile screenshot

这是我在 Controller 中用于 profile 路由 的代码:

//==
//=== My Profile ====
//==

#[Route('/profile/id', name: 'profile')]
public function profile($id, Request $request): Response

    $user = $this->getDoctrine()->getRepository(User::class)->find($id);
    $form = $this->createFormBuilder($user)
        ->add("user_name", TextType::class, array('attr' => array("class" => "form-control fw-light border-1 border-muted rounded-pill bg-light shadow-sm mt-3 text-muted", "style" => "margin-bottom:15px")))
        ->add("email", TextType::class, array('attr' => array("class" => "form-control fw-light border-1 border-muted rounded-pill bg-light shadow-sm mt-3 text-muted", "style" => "margin-bottom:15px")))
        ->add("user_image", TextType::class, array('attr' => array("class" => "form-control fw-light border-1 border-muted rounded-pill bg-light shadow-sm mt-3 text-muted", "style" => "margin-bottom:15px")))
        ->add("save", SubmitType::class, array('attr' => array("class" => "btn-outline-primary fw-light btn-sm border-1 shadow-sm rounded-pill m-3", "style" => "margin-bottom:15px"), "label" => "Save changes"))->getForm();
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) 
        $user_name = $form["user_name"]->getData();
        $email = $form["email"]->getData();
        $user_image = $form["user_image"]->getData();
       
        $user->setUserName($user_name);
        $user->setEmail($email);
        $user->setUserImage($user_image);

        $em = $this->getDoctrine()->getManager();

        $em->persist($user);
        $em->flush();

        $this->addFlash('notice', 'Profile Edited');

        return $this->redirectToRoute('meal');
    
    return $this->render('meal/profile.html.twig', 
                        ["form" => $form->createView()]
    );



//=== Showing all the users===

#[Route('/manageusers', name: 'manageusers')]
public function manageusers(): Response

    $user = $this->getDoctrine()->getRepository('App:User')->findAll();
    return $this->render('meal/manageusers.html.twig', array('user' => $user));

这是我在实际 Profile twig 文件中的代码:

% extends 'base.html.twig' %

% block title %My Profile
% endblock %

% block body %

    <h1 class="page-header fw-light text-center py-5">
        Edit Profile
    </h1>
    <div class="container ">
        <div class="row d-flex justify-content-center">
            <div class="col-12 col-sm-10 col-md-8 col-lg-6 ">
                <div class="form mb-4">
                     form_start(form) 
                     form_widget(form) 
                     form_end(form) 
                </div>
            </div>
        </div>
    </div>

% endblock %

【问题讨论】:

注册过程中,数据库中的数据有变化吗? 嘿@Atchiiii 是的,一切都已注册,我可以在数据库中正常看到它。此外,当我从个人资料页面编辑某些内容时,内容再次发生变化。 你不是在实体管理器代码中做一些奇怪的事情吗 可能是这里发现的错误:$user_name = $form ["user_name"]-&gt;setData(); 你有没有像 emailuser_image 那样把它改成 getData() 所有这些获取数据和设置任何东西都是不必要的。提交表单时,您的数据对象将被更新。如果需要的话,通过 dd($user) 来说服自己。 【参考方案1】:

在您的用户实体中,您可能有这样的块:

/**
 * A visual identifier that represents this user.
 *
 * @see UserInterface
 */
public function getUsername(): string

    return (string) $this->email;

你可以尝试创建这样的函数

public function getRealUserName(): string

    return $this->userName;

然后调整您的表单,或者修改(但关心身份验证)您的 getUsername() 函数

【讨论】:

以上是关于在 user_name 的占位符中获取错误值的主要内容,如果未能解决你的问题,请参考以下文章

替换 java 属性中占位符中的属性值 - IntelliJ 2017.2

如何在 SwiftUI WidgetKit 占位符中自定义占位符外观?

如何在占位符中添加图标

占位符中 -5 的目的是啥? C#

POWERPOINT中,在幻灯片的占位符中添加的文本有啥要求

如何在输入标签的占位符中添加材质图标