LINUX.ORG.RU

Symfony2: Форма регистрации юзеров с указанием группы.

 , ,


0

1

Стоит задача предоставить возможность юзерам при регистрации выбрать свою группу. Работа с юзерами на базе FOSUserBundle, расширил форму:

// Acme\UserBundle\Form\Type\RegistrationFormType.php

$builder->add('my_group', 'choice', array(
    'choices' => array(
        'group_a' => 'А',
        'group_b' => 'Б',
    ),            
    'data' => 'group_b',
    'expanded'  => true,
));

Теперь надо сделать валидацию, чтобы через my_group могло проходить либо group_a, либо group_b.

И вторая задача, после успешной валидации, надо создать юзера, а на базе поля my_group добавить его в группу, например таким образом:

$user->addGroup($this->get('fos_user.group_manager')->findGroupByName('group_a'));

$this->get('fos_user.user_manager')->updateUser($this->getUser());

Подскажите плиз, как это сделать, куда копать?



Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от VirRaa

о! благодарю! :) entity видимо то что надо! :) теперь поле в форму добавляю так:

$builder->add('groups', 'entity', array(
    'class' => 'Acme\UserBundle\Entity\Group',
    'property' => 'title',
    'required' => true,
    'expanded' => true,
));

сохранение происходит корректно, но неполучается настроить валидацию :(( описываю валидацию так:

Acme\UserBundle\Entity\User:
    properties:
        groups:
            - Choice: { choices: [group_a, group_b], message: Choose a valid group.}

пробовал также и

            - Choice: { choices: ["1", "2"], message: Choose a valid group.}

но всегда получаю сообщение: Choose a valid group.

есть мысли как можно заставить пропускать только заданный список групп?

digi
() автор топика
Ответ на: комментарий от digi

Используй query_builder, и SQL запросом выводи для выбора только те записи, которые нужны.

$builder->add('users', 'entity', array(
    'class' => 'AcmeHelloBundle:User',
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('u')
            ->orderBy('u.username', 'ASC');
    },
));
VirRaa ★★★
()
Ответ на: комментарий от VirRaa

как бы это не совсем то ;) но пока валидацию сделал так:

$builder->addValidator(new CallbackValidator(function(FormInterface $form) {
    if (!$form['groups']->getData() or $form['groups']->getData()->getName() !== 'group_b') {
        $form['groups']->addError(new FormError('Надо указать группу Б.'));
    }
}));

работает как надо ;)

кстати, что надо сделать чтобы форма понимала запись AcmeUserBundle:Group? а то мне выдаёт

Class AcmeUserBundle:Group does not exist
500 Internal Server Error - ReflectionException 

digi
() автор топика
Ответ на: комментарий от digi
$builder->addValidator(new CallbackValidator(function(FormInterface $form) {
    if (!$form['groups']->getData() or $form['groups']->getData()->getName() !== 'group_b') {
        $form['groups']->addError(new FormError('Надо указать группу Б.'));
    }
}));

Охренеть. А в Symfony все проверки такими мегаэтажерками пишутся или это конкретно какой-то исключительный частный случай? (тему не читал, с Symfony не знаком).

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

нет не всё :) просто у меня видимо задача такая необычная ;)) хотя мне кажется подобные задачи должны быть достаточно распространены и как-то конфигурироваться через yml... но я пока не нашел как именно... по этому пока так вкостылял...

digi
() автор топика
Ответ на: комментарий от KRoN73

Охренеть. А в Symfony все проверки такими мегаэтажерками пишутся или это конкретно какой-то исключительный частный случай? (тему не читал, с Symfony не знаком).

Частный случай, причем есть нормальное решение этого частного случая.

VirRaa ★★★
()
Ответ на: комментарий от VirRaa

подскажи плиз нормальное решение?? :))

еще кстати интересует как можно данные по умолчанию указать для крыжиков :)

digi
() автор топика
Ответ на: комментарий от digi

Хорошо помогу, но для этого свяжись со мной, например, по скайпу. Вечером, часиков в 9. Мне надо подробнее вникнуть в суть задачи.

VirRaa ★★★
()
Ответ на: комментарий от KRoN73

Ну, симфа всегда довольно громоздакая была, хоть и мощная, в свое время из-за громоздкости стал пользовать CodeIgniter, не такой мощный, но весьма легковесный.

gwinn ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.