Есть ли способ в Symfony2 настроить имена полей в классах типов?

Я пробовал примерно так:

<?php

// src/Fuz/TypesBundle/Form/Editor/GeneralType.php

namespace Fuz\TypesBundle\Form\Editor;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Fuz\TypesBundle\Entity\Editor\GeneralData;

class GeneralType extends AbstractType
{

    /**
     * Root node ID
     *
     * @access private
     * @var rootId
     */
    private $rootId;

    /**
     * Current node ID
     *
     * @access private
     * @var rootId
     */
    private $currentId;

    /**
     * Constructor
     *
     * @access public
     * @param string $rootId
     * @param string $currentId
     */
    public function __construct($rootId, $currentId)
    {
        $this->rootId = $rootId;
        $this->currentId = $currentId;
    }

    /**
     * General form fields
     *
     * @access public
     * @param FormBuilder $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('useField', 'text',
           array (
                'required' => false,
                'label' => 'types.general.use_field',
                'read_only' => ($this->rootId == $this->currentId),
                'attr' => array(
                        'name' => "useField{$this->currentId}",
                )
        ));
        // ...
    }

    /**
     * Form name
     *
     * @access public
     * @return string
     */
    public function getName()
    {
        return 'General';
    }

}

Но мое поле все еще имеет имя General[useField] (где General - мое имя формы).

Я также хочу, чтобы валидация работала.

0
Alain Tiemblo 14 Окт 2012 в 19:01

1 ответ

Лучший ответ

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

Моя ошибка заключалась в том, что я пытался динамически изменять имена полей, но правильным способом было изменить имя формы.

/**
 * Form name
 *
 * @access public
 * @return string
 */
public function getName()
{
    return 'General' . $this->currentId;
}

Таким образом, мое имя поля становится: General80wm4kxsss[useField] и является уникальным.

1
Alain Tiemblo 14 Окт 2012 в 19:01