Reputation: 586
i'm trying to remove from my form the generic FOSUserBundle message.
That is the result when i've an error :
i want to remove the message in the red square. And as you can see i succeeded to ad my own error message.
I checked a ton of other forum without success.
Here is my code :
app/MDBUserBundle/views/Registration/register_content.html ( i overrided the register form)
{% trans_default_domain 'FOSUserBundle' %}
<div class="form-group">
<label for={{ form.username.vars.id }}>Pseudo</label>
{{ form_widget(form.username,{'attr': {'class': 'form-control' , 'placeholder':'Entrez votre pseudo'}}) }}
{{ form_errors(form.username) }}
</div>
<div class="form-group">
<label for={{ form.email.vars.id }}>Adresse e-mail</label>
{{ form_widget(form.email , {'attr': {'class': 'form-control' , 'placeholder':'Entrez votre adresse mail'}}) }}
{{ form_errors(form.email) }}
</div>
<div class="form-group">
<label for={{ form.plainPassword.first.vars.id }}>Mot de passe</label>
{{ form_widget(form.plainPassword.first,{'attr': {'class': 'form-control' , 'placeholder':'Entrez votre mot de passe'}}) }}
{{ form_errors(form.plainPassword.first) }}
</div>
<div class="form-group">
<label for={{ form.plainPassword.second.vars.id }}>Confirmation du mot de passe</label>
{{ form_widget(form.plainPassword.second,{'attr': {'class': 'form-control' , 'placeholder':'Confirmez votre mot de passe'}}) }}
</div>
{{ form_rest(form) }}
<div>
<input type="submit" class="btn btn-default" value="Enregistrer" />
</div>
</form>
</div>
in MDB/USerBundle/Type/RegistrationFormType.php
<?php
namespace MDB\UserBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class RegistrationFormType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
parent::buildForm($builder, $options);
// Ajoutez vos champs ici, revoilà notre champ *location* :
}
public function getParent() {
return 'fos_user_registration';
}
public function getName() {
return 'mdb_user_registration';
}
}
?>
in MDB/UserBundle/Validator/Constraints
ContainsUser.php
namespace MDB\UserBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class ContainsUser extends Constraint {
public $message = 'L\'utilisateur "%string%" exist déja.';
public function validatedBy() {
return 'contains_user';
}
public function getTargets() {
return array(self::CLASS_CONSTRAINT, self::PROPERTY_CONSTRAINT);
}
}
ContainsUserValidator.php
<?php
namespace MDB\UserBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class ContainsUserValidator extends ConstraintValidator
{
protected $em;
public function __construct(\Doctrine\ORM\EntityManager $em)
{
$this->em = $em;
}
public function validate($value, Constraint $constraint)
{
$repository = $this->em->getRepository('MDBUserBundle:User');
$user = $repository->findOneByUsername($value);
if ($user) {
$this->context->addViolation(
$constraint->message,
array('%string%' => $value)
);
}}}
MDBUserBundle.php
<?php
namespace MDB\UserBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class MDBUserBundle extends Bundle {
public function getParent()
{
return 'FOSUserBundle';
}
}
validation.xml
<?xml version="1.0" ?>
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping
http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
<class name="FOS\UserBundle\Model\User">
<property name="username">
<constraint name="NotBlank">
<option name="message">fos_user.username.blank</option>
<option name="groups">
<value>Registration</value>
<value>Profile</value>
</option>
</constraint>
<constraint name="MDB\UserBundle\Validator\Constraints\ContainsUser">
<option name="groups">
<value>Registration</value>
<value>Profile</value>
</option>
</constraint>
<constraint name="Length">
<option name="min">4</option>
<option name="minMessage">fos_user.username.short</option>
<option name="max">20</option>
<option name="maxMessage">fos_user.username.long</option>
<option name="groups">
<value>Registration</value>
<value>Profile</value>
</option>
</constraint>
</property>
</class>
</constraint-mapping>
services.yml
services:
mdb_user.registration.form.type:
class: MDB\UserBundle\Form\Type\RegistrationFormType
tags:
- { name: form.type, alias: mdb_user_registration }
mdb.user.validator.contains_user:
class: MDB\UserBundle\Validator\Constraints\ContainsUserValidator
arguments: [ "@doctrine.orm.entity_manager" ]
tags:
- { name: validator.constraint_validator, alias: contains_user }
mdb_user.registration_complet:
class: MDB\UserBundle\EventListener\RegistrationConfirmListener
arguments: ["@router"]
tags:
- { name: kernel.event_subscriber }
So if you have an idea to remove these messages it will be great :)
Thanks in advance
Upvotes: 2
Views: 1147
Reputation: 13300
I think that your constraint is the same as original FOSUserBundle constraint for username. You probably have small experience with Symfony and don't know that it has translation component disabled by default.
All bundles have their translation files in dot-notation (fos_user.username.already_exist
). You can override existing translation file or add new with your locale. In that file you can set all your messages for all constraints.
If you want to disable some constraints you need to override default validation
file.
Upvotes: 2