FOSUserBundle按请求修改表单

时间:2015-02-03 12:54:30

标签: php forms symfony fosuserbundle

我想通过get request修改注册表。

如果?type=x启用a,b,c。否则?type=y禁用a,b,c并设置required => false

这是基本逻辑。我怎样才能做到这一点?

注册类型:

<?php

namespace CS\UserBundle\Form\Type;

use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\FormBuilderInterface;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;

class RegistrationType extends BaseType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);

        $builder
            ->remove('username')
            ->add('name', null, array(
                'label' => 'Yetkili Kişi',
                'required' => true,
                'attr' => [
                    'title' => 'İsim ve Soyisim',
                    'placeholder' => 'İsim ve Soyisim'
                ]
            ))
            ->add('business_name', null, array(
                'label' => 'Firma Ünvanı',
                'required' => true,
                'attr' => [
                    'title' => 'Firma Ünvanı',
                    'placeholder' => 'Firma Adı'
                ]
            ))
            ->add('city', 'entity', array(
                'label' => 'Şehir',
                'empty_value' => 'Seçiniz...',
                'class' => 'CSContactBundle:City',
                'property' => 'name',
                'query_builder' => function(EntityRepository $er) {
                    return $er->createQueryBuilder('c')->where('c.country_id = 1');
                },
                'mapped' => false,
                'required' => true,
                'attr' => [
                    'title' => 'Bulunduğunuz Şehir'
                ]
            ))
            ->add('town', 'entity', array(
                'label' => 'İlçe',
                'empty_value' => 'Önce Şehir Seçiniz...',
                'class' => 'CSContactBundle:Town',
                'property' => 'name',
                'required' => true,
                'attr' => [
                    'disabled' => 'disabled',
                    'title' => 'Bulunduğunuz İlçe'
                ]
            ))
            ->add('address', 'textarea', array(
                'label' => 'Adres',
                'required' => true,
                'attr' => [
                    'title' => 'İkamet Ettiğiniz Tam Adres (Şehir ve İlçe Eklemeyin)'
                ]
            ))
            ->add('mobile', null, array(
                'label' => 'GSM',
                'required' => true,
                'attr' => [
                    'class' => 'phone',
                    'title' => 'Telefon Formatı: 0XXX XXX XX XX'
                ]
            ))
            ->add('phone', null, array(
                'label' => 'Telefon',
                'required' => true,
                'attr' => [
                    'class' => 'phone',
                    'title' => 'Telefon Formatı: 0XXX XXX XX XX'
                ]
            ))
            ->add('fax', null, array(
                'label' => 'Faks',
                'required' => false,
                'attr' => [
                    'class' => 'phone',
                    'title' => 'Faks Formatı: 0XXX XXX XX XX'
                ]
            ))
            ->add('tax_office', null, array(
                'label' => 'Vergi Dairesi',
                'required' => true,
                'attr' => [
                    'placeholder' => 'Vergi Dairesi',
                    'title' => 'Firmanızın Bağlı Olduğu Vergi Dairesi'
                ]
            ))
            ->add('tax_id', null, array(
                'label' => 'Vergi Numarası',
                'required' => true,
                'attr' => [
                    'placeholder' => 'Vergi Numarası',
                    'class' => 'tax',
                    'title' => 'Firmanızın Vergi Numarası'
                ]
            ))
            ->add('captcha', 'captcha', array(
                'label' => 'Doğrulama',
                'required' => true,
                'attr' => [
                    'placeholder' => 'Doğrulama Kodu',
                    'title' => 'Resimde Gördüklerinizi Yazın'
                ]
            ));


        $factory = $builder->getFormFactory();

        $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($builder) {
            $form = $event->getForm();
            $data = $event->getData();
        });
    }

    public function getName()
    {
        return 'cs_user_registration';
    }
}

0 个答案:

没有答案