Bonsoir tout le monde je viens vous voir car j'ai un problème et je ne trouve vraiment pas de solution (oui c'est encore moi ^^' je suis vraiment désole)
alors tout est dans le titre symfony m'affiche 2 fois les message d'erreur mais une image vaut mieux qu'un long discours alors la je ne c'est pas d'ou ça viens j'ai beau vérifier je ne trouve pas mais vraiment
alors je vous partage mon code j'utilise FosUserBundle
d'abord mon entité
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @Assert\Regex("/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{6,}$/",
* message = "Votre mot de passe doit contenir minimum 6 carctère avec une miniscule majuscule un chiffre "
* )
*
* @var string
*/
//protected $password;
/**
* @ORM\Column(type="string", length=255)
* @var string
*/
protected $age;
public function getAge(): ?string
{
return $this->age;
}
public function setAge(string $age): self
{
$this->age = $age;
return $this;
}
/**
* Place un rôle unique à l'utilisateur (supprimer tous les anciens rôles)
* @param string $userRole
*/
public function setRole(string $userRole)
{
// Vider les rôles
foreach ($this->getRoles() as $role) {
$this->removeRole($role);
}
// Ajout le rôle unique passé en paramètre
$this->addRole($userRole);
}
}
puis mon formulaire type
<?php
namespace App\Form;
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\OptionsResolver\OptionsResolver;
class RegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('age', NumberType::class, [
'attr' => [
'placeholder' => 'votre age entre 8 et 120 ans'
],
'constraints' => [ new Assert\Range([
'min' => '8',
'max' => '120',
'minMessage' => 'Vous devez avoir minimum {{ limit }} ans',
'maxMessage' => 'Vous ne pouvez pas faire plus de {{ limit }} ans'
])]
])
->add('username', TextType::class, [
'constraints' => [ new Assert\Regex([
'pattern' => '/^[A-Za-z0-9_-]{5,30}$/',
'message' => 'Votre Pseudonyme n\'est pas valide !, ne doit pas dépasser 30 carctère avoir minimum 5 et ne contient que des lettres chiffre et (-,_) !'
])]
])
->add('email', EmailType::class, [
'constraints' => [ new Assert\Regex([
'pattern' => '/^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/',
'message' => 'Votre adresse mail n\'est pas valide !'
])]
])
;
}
public function getParent()
{
return 'FOS\UserBundle\Form\Type\RegistrationFormType';
}
public function getBlockPrefix()
{
return 'app_user_registration';
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}
et enfin ma vue
{{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register')}) }}
<div class="animate-box">
<h1 class="text-center">Inscrivez vous</h1>
<div class="form-group">
{{ form_label(form.username) }}
{{ form_widget(form.username, {'attr': {'placeholder': 'Un joli pseudonyme qui doit contenir entre 5 et 30 lettres'}}) }}
{{ form_errors(form.username) }}
</div>
<div class="form-group">
{{ form_label(form.email) }}
{{ form_widget(form.email, {'attr': {'placeholder': 'Une adresse mail valide : gmail, hotmail... vous devez confirmer votre inscription par mail'}}) }}
{{ form_errors(form.email) }}
</div>
<div class="form-group">
{{ form_label(form.plainPassword.first) }}
{{ form_widget(form.plainPassword.first, {'attr': {'placeholder': 'Votre mot de passe doit contenir minimum 6 caractères avec une minuscule, une majuscule et un chiffre'}}) }}
{{ form_errors(form.plainPassword.first) }}
</div>
<div class="form-group">
{{ form_label(form.plainPassword.second) }}
{{ form_widget(form.plainPassword.second, {'attr': {'placeholder': 'Votre mot de passe doit être identique'}}) }}
{{ form_errors(form.plainPassword.second) }}
</div>
<div class="form-group">
{{ form_label(form.age) }}
{{ form_widget(form.age) }}
{{ form_errors(form.age) }}
</div>
<div class="form-group">
<input type="submit" value="Inscription" class="btn btn-primary">
</div>
</div>
{{ form_end(form) }}
merci de votre aide c'est vraiment urgent car je doit présenter un projet et je doit le rendre au plus vite avant fin mai
Il faut retirer les form_errors , ils sont automatiquement ajoutés par le thème (boostrap 4 je crois) par défaut de Symfony (tu peux regarder le fichier boostrap_4_layout.html.twig)
Tu n'as plus les messages en double non ? Et puis pour l'email , je crois que c'est à cause de Assert\Regex , en même temps on ne la valide pas par regex.
Tu peux retirer le champ de ton FormType et laisser FosUser le gérer.
non il utilise pas le même code car pour mon formulaire de contact je n'est pas d'entité juste un formulaire et une vue avec un controller qui gère l'envoie de mail
mais si je ne veux pas que FosUser géré le type mail je fait comment pour ne pas afficher 2 message d'erreur ? car j'ai retiré form_errors mais ça m'affiche quand même 2 erreur de type mail c'est bizarre
Qu'est-ce que tu apportes de plus que la validation par défaut de FosUser ? Une regex ? Et tu penses que t'en a besoin ?
Maintenant tu peux persister avec Assert\Regex , mais surtout ne trouve pas bizarre d'avoir 2 erreurs car j'ai tenté en vain de l'expliquer.
- Edité par WillyKouassi 27 mai 2018 à 3:22:48
le bienfait n'est jamais perdu
[Symfony] affiche les erreurs 2 fois
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
https://dev-crown.com/
https://dev-crown.com/
https://dev-crown.com/
https://dev-crown.com/