Symfony3:设置Custom FormType“name”/“blockPrefix”

时间:2016-11-24 10:57:58

标签: symfony symfony-forms

我有modules/dashboard/index.js。在此Formtype中,我在Formtype函数中了解了options - 数组中的一个键buildForm。我想将此值添加到additionalName名称(在Symfony3 BlockPrefix中)。但我该如何设置呢?

FormType

我已经尝试在类的顶部设置变量private class AdultType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $additionalName = $options['additionalName']; $builder ->add('account', TextType::class,array( 'label' => 'account', 'required' => false, )) ; } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'My\Bundle\WebsiteBundle\Model\Adult', 'csrf_protection' => true, 'cascade_validation' => true, 'name' => "" )); } /** * @return string */ public function getBlockPrefix() { //Here I need the $options['additionalName'] return 'my_bundle_websitebundle_adult_'.$options['additionalName']; } ,在$additionalName;函数中进行设置并使用buildForm $this->additionalName访问它功能。但getBlockPrefix中的值为空。所以我认为在getBlockPrefix之前调用了getBlockPrefix

从另一种形式调用类型:

buildForm

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我建议你在FormType中添加一个属性:

class AdultType extends AbstractType
{    
    protected $_additionalName;

    public function __construct($additionalName= ''){
        $this->_additionalName = $additionalName;
    }


    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $additionalName = $options['additionalName'];

        $builder
            ->add('account', TextType::class,array(
                'label' => 'account',
                'required' => false,
            ))

        ;
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'My\Bundle\WebsiteBundle\Model\Adult',
            'csrf_protection' => true,
            'cascade_validation' => true,
            'name' => ""
        ));
    }

    /*
     * @return string
     */
    public function getBlockPrefix()
    {
        //Here I need the $options['additionalName']
        return 'my_bundle_websitebundle_adult_'.$this->_additionalName;
    }

编辑:

Arf ..我认为它只适用于Symfony 2之前(2.8)..

答案 1 :(得分:-1)

试试这个:

class AdultType extends AbstractType
{
    protected $_additionalName;

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $this->_additionalName = $options['additionalName'];

        $builder
            ->add('account', TextType::class,array(
                'label' => 'account',
                'required' => false,
            ))

        ;
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'My\Bundle\WebsiteBundle\Model\Adult',
            'csrf_protection' => true,
            'cascade_validation' => true,
            'name' => ""
        ));
    }

    /**
     * @return string
     */
    public function getBlockPrefix()
    {
        //Here I need the $options['additionalName']
        return 'my_bundle_websitebundle_adult_'.$this->_additionalName;
    }

    public function getName(){
        return $this->getBlockPrefix();
    }
}

getBlockPrefix无法识别$ options [' additionalName'],因此您需要一个类属性。另外你可以试试getName()