0

Symfony2にTypeクラスのフィールド名をカスタマイズする方法はありますか?

私はこのようなことを試みました:

<?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は私のフォーム名です)。

また、検証を機能させ続けたいと思います。

4

1 に答える 1

1

質問を投稿する前に答えを見つけましたが、これは他の人にも役立つと思います。

私の間違いは、フィールド名を動的に変更しようとしたことでしたが、正しい方法はフォーム名を変更することでした。

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

このようにして、私のフィールド名は:General80wm4kxsss[useField]になり、一意になります。

于 2012-10-14T15:01:39.103 に答える