Symfony - 我不能用树枝自定义我的表单
Symfony - I can not customize my form with twig
我想在 twig 中创建一个自定义的登录表单(登录名 + 密码)。如果输入的信息存在,表单应该搜索用户 table 和 LDAP 目录。
此外,当我验证表单时,我不希望在 URL 中找到登录名和密码。
验证时,如果用户存在,他将被重定向到一个页面,否则他将停留在登录页面。
我设法制作了一个自定义的表格,但是 returns 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 中没有找到登录名和密码。它只是一个检查和功能,它将在下一页显示是或否。而我做不到。
此外,从功能的角度来看,从我的 Users 实体通过 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';
}
}
感谢您的帮助!
目前您没有使用 ConnexionType 生成的表单,如果您想在 Twig 文件中使用它,您可以这样显示它 {{form(form) }}
如果您通过控制器发送它。
You have all the necessary information here
然后在url中不传递登录名和密码使用POST方法
否则我推荐安全包 Bundle Security 以获得安全形式
希望对你有所帮助。
我不太确定,你是如何重新发明轮子的。但是 symfony 准备了很多东西,因为这在用例中并不少见。
我喜欢关于构建登录的 3.4 教程:https://symfony.com/doc/3.4/security/form_login_setup.html
(在旁边,有可能切换到 4.3 或其他,但是,3.4 教程应该仍然有效,即使在 4.x)
您并不特别需要自己的 FormType 来进行登录,因为安全组件已经处理了表单提交。也看看 csrf 保护 ;o)
我想在 twig 中创建一个自定义的登录表单(登录名 + 密码)。如果输入的信息存在,表单应该搜索用户 table 和 LDAP 目录。
此外,当我验证表单时,我不希望在 URL 中找到登录名和密码。
验证时,如果用户存在,他将被重定向到一个页面,否则他将停留在登录页面。
我设法制作了一个自定义的表格,但是 returns 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 中没有找到登录名和密码。它只是一个检查和功能,它将在下一页显示是或否。而我做不到。
此外,从功能的角度来看,从我的 Users 实体通过 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';
}
}
感谢您的帮助!
目前您没有使用 ConnexionType 生成的表单,如果您想在 Twig 文件中使用它,您可以这样显示它 {{form(form) }}
如果您通过控制器发送它。
You have all the necessary information here
然后在url中不传递登录名和密码使用POST方法
否则我推荐安全包 Bundle Security 以获得安全形式
希望对你有所帮助。
我不太确定,你是如何重新发明轮子的。但是 symfony 准备了很多东西,因为这在用例中并不少见。
我喜欢关于构建登录的 3.4 教程:https://symfony.com/doc/3.4/security/form_login_setup.html
(在旁边,有可能切换到 4.3 或其他,但是,3.4 教程应该仍然有效,即使在 4.x)
您并不特别需要自己的 FormType 来进行登录,因为安全组件已经处理了表单提交。也看看 csrf 保护 ;o)