symfony - 删除 FOSUserBundle 错误消息

标签 symfony twig fosuserbundle

我正在尝试从表单中删除通用 FOSUserBundle 消息。

这是我遇到错误时的结果: enter image description here

我想删除红色方 block 中的消息。 正如您所看到的,我成功地发布了我自己的错误消息。

我检查了很多其他论坛但没有成功。

这是我的代码:

  • app/MDBUserBundle/views/Registration/register_content.html(我覆盖了注册表单)

     {% 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>
    
  • 在 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';
    }
    
    } 
    ?>
    
  • 在 MDB/UserBundle/Validator/Constraints

包含User.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);
    }

}

包含UserValidator.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)
            );
}}}
  • 在 MDN.UserBundle 中

MDBUserBundle.php

<?php

namespace MDB\UserBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class MDBUserBundle extends Bundle {

public function getParent()
    {
        return 'FOSUserBundle';
    }
}
  • 在 MDB/UserBundle/Ressources/config 中

验证.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>

服务.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 }

因此,如果您有想法删除这些消息,那就太好了:)

提前致谢

最佳答案

我认为您的约束与用户名的原始 FOSUserBundle 约束相同。您可能对 Symfony 有一些经验,并且不知道它有 translation component默认禁用。

所有 bundle 的翻译文件均采用点表示法 (fos_user.username.already_exist)。您可以覆盖现有翻译文件或使用您的语言环境添加新文件。在该文件中,您可以设置所有约束的所有消息。

如果您想禁用某些约束,则需要覆盖默认验证文件。

关于symfony - 删除 FOSUserBundle 错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28230576/

相关文章:

symfony - 如何在FOQElasticaBundle for Symfony2中使用嵌套查询

symfony - 如何在 xml 路由文件中给出一个空的默认参数

javascript - 提取字段值并将其应用为 css 颜色值

symfony - 如何更改 Twig 输入文本中的形式

php - Twig 扩展中的标签与函数

php - 使用 FOSRestBundle 和分页器时为 "Resources are not supported in serialized data."

symfony - OroCRM 如何禁用客户端验证?

javascript - 带有beforeSend但隐藏凭据的ajax

php - Symfony2 FOSbundle : record every user login date

php - FosUserBundle 在 FilterUserResponseEvent 中重定向