2012-10-14 60 views
0

Symfony2中有一種方法可以自定義Type類型上的字段名稱嗎?自定義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]名(其中一般是我的表單名稱)。

我也想保持驗證工作。

回答

1

Okey我在發佈我的問題之前找到了我的答案,但我認爲這可能對其他人有用。

我的錯誤是我試圖動態更改字段名稱,但正確的方法是更改​​表單名稱。

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

以這樣的方式,我的字段名變爲:General80wm4kxsss[useField]而且是唯一的。