【问题标题】:Symfony - I can not customize my form with twigSymfony - 我不能用树枝自定义我的表单
【发布时间】:2019-04-01 10:12:38
【问题描述】:

我想在 twig 中创建一个登录表单(登录名 + 密码)并且是自定义的。如果输入的信息存在,表单应该搜索用户表和 LDAP 目录。

此外,当我验证表单时,我不希望在 URL 中找到登录名和密码。

在验证时,如果用户存在,他会被重定向到一个页面,否则他会留在登录页面。

我设法制作了一个自定义的表单,但它会在 URL 中返回登录名和密码。

看起来像这样:

enter image description here

这是twig中的代码:

{% extends 'base.html.twig' %}
{% block stylesheets %}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>rel="stylesheet"> 

{% endblock %}
{% block body %}

<form class="navbar-form navbar-center">
    <div class="input-group">
        <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
        <input id="text" type="text" class="form-control" name="login" value="" placeholder="Login">                                        
    </div>
    <div class="input-group">
        <span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
        <input id="password" type="password" class="form-control" name="password" value="" placeholder="Mot de passe">                                        
    </div>
    <button type="submit" class="btn btn-primary">Valider</button>
<br/><br/>
    Pas de compte académique ? <a href="{{path('paquets_index')}}">Demande de création de compte</a>
</form>

{% endblock %}

现在我的目标是确保在要验证的 URL 中找不到登录名和密码。它只是一个检查和功能,它将在下一页显示是或否。而我做不到。

此外,从功能的角度来看,通过我的用户实体中的 formType 构建器是否有用?或者我可以满足于这种形式,它将输入的信息发送回控制器,进行验证?

如有疑问,这是我的表单生成器

<?php

namespace Site\PagesBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TextType;

class ConnexionType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        ->add('identifiant', TextType::class)
        ->add('password', PasswordType::class,array(
            'attr' => array(
                'placeholder'=> 'Mot de passe',
                'label' =>'Mot de passe',
            )
        ))
        ;
    }/**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Site\PagesBundle\Entity\User'
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'site_pagesbundle_user';
    }


}

感谢您的帮助!

【问题讨论】:

    标签: php symfony login twig


    【解决方案1】:

    我不太确定,你对重新发明轮子有多大的热情。但是 symfony 已经准备了很多东西,因为这并不少见。

    我喜欢 3.4 建立登录的教程:https://symfony.com/doc/3.4/security/form_login_setup.html

    (顺便说一句,有可能切换到 4.3 或其他版本,但是,即使在 4.x 中,3.4 教程仍然可以使用)

    您并不特别需要您自己的 FormType 来进行登录,因为安全组件已经处理了表单提交。也看看 csrf 保护 ;o)

    【讨论】:

    • 感谢您的回答!我刚读了这篇文章。那么如果输入的数据存在,它会在用户表中查找并自动重定向吗?但是,没有提到此实用程序是否允许同时检查用户表和 LDAP 目录,是这样吗?
    • 我怀疑你必须添加一个新的 UserProvider。
    • @AgarioFR symfony.com/doc/current/security/ldap.html 应该可以解决问题,使用链用户提供程序首先检查 ldap,然后检查 db
    • 谢谢!所以这将检查 LDAP,但这是否意味着我必须为 LDAP 制作一个登录表单,为 DB 用户制作一个登录表单?或者我可以将两者结合起来吗?
    • @AgarioFR 我相信你可以将它结合起来,不过我很确定,谷歌搜索会帮助你找到答案(你不会是第一个遇到这个挑战的人;o)跨度>
    【解决方案2】:

    如果您想在 Twig 文件中使用 ConnexionType 生成的表单,目前您没有使用它,如果您通过控制器发送它,则可以像 {{form(form) }} 那样显示它。

    You have all the necessary information here

    然后不通过url中的登录名和密码使用POST方法

    否则我建议使用安全包Bundle Security 来获取安全表单

    希望对你有所帮助。

    【讨论】:

    • 您好,是的,我的目标是准确地使用 formType,同时保持与我在第一篇照片中发布的完全相同的渲染(设计)。因为使用 formType,我无法在正确插入字形图标的情况下获得 Bootstrap 3 渲染。
    • symfony.com/doc/current/form/bootstrap4.html 自定义表单的第一个答案
    • 感谢您的回答,我终于设法编辑了表格:)
    猜你喜欢
    • 2017-09-06
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2018-08-16
    相关资源
    最近更新 更多