LedZelkin
LedZelkin

Reputation: 586

Delete FOSUserBundle error messages

i'm trying to remove from my form the generic FOSUserBundle message.

That is the result when i've an error : enter image description here

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 :

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

Answers (1)

Michael Sivolobov
Michael Sivolobov

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

Related Questions