FosUserBundle — validate username

Возможно для кого-то это не будет открытием, но мне пришлось повозиться.

Задача: нужно валидировать username из класса FOSUserBundleModelUser

В инете много информации как переопределить валидацию этого бандла, но вся она довольно старая (или может просто мне не удалось найти новую).

Значит помучавшись, я таки нашел решение, которое как и положено находится в официальной документации Symfony (вот здесь).

И так, у нас есть entity, которая расширяет модель из бандла


use DoctrineCommonCollectionsArrayCollection;
use FOSUserBundleModelUser as BaseUser;
use DoctrineORMMapping as ORM;
use GedmoMappingAnnotation as Gedmo;
use GedmoTimestampableTraitsTimestampableEntity;
use SymfonyComponentValidatorConstraints as Assert;

/**
 * @ORMTable(name="users")
 * @ORMEntity(repositoryClass="AppBundleEntityRepositoryUserRepository")
 * @ORMHasLifecycleCallbacks()
 */
class User extends BaseUser
{
    use TimestampableEntity;

    /**
     * @ORMId
     * @ORMColumn(type="integer")
     * @ORMGeneratedValue(strategy="AUTO")
     * @var int
     */
    protected $id;

Все что нам нужно сделать, это создать файл src/AppBundle/Resources/config/validation.yml и добавить туда валидацию c необходимыми нам группами


AppBundleEntityUser:
    properties:
        username:
            - Regex:
                pattern: '/^[a-zA-Z0-9_]+$/'
                groups: [FillProfile, Profile]

Как написано в документации, вся валидация собирается из бандлов в validation metadata tree, это значит, что можно добавлять новые условия валидации к полям, но нельзя переопределять уже существующие правила валидации.

Буду очень рад если эта заметка кому нибудь поможет.

 

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: