2012-06-28 41 views
0

我寫了一個formtype擴展了forsuser ProfileFormType,但每次我在模板中呈現它時,總會有一個標籤「User」出現在表單頂部。我想通了,說到形成原fosuser ProfileFormType:覆蓋Fosuser配置文件表單的標籤

namespace FOS\UserBundle\Form\Type; 
use ..... 
class ProfileFormType extends AbstractType 
{ 

private $class; 

/** 
* @param string $class The User class name 
*/ 
public function __construct($class) 
{ 
    $this->class = $class; 
} 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $child = $builder->create('user', 'form', array('data_class' => $this->class)); 
    $this->buildUserForm($child, $options); 

    ....... 

如果我添加屬性此表單域,如:

$child = $builder->create('user', 'form', array('label'=>'some info','data_class' => $this->class)); 

它可以工作,但它的壞的修改原始文件,如何我可以修改它在我的自定義formtype或模板時渲染?

回答

1

您需要通過創建自己的UserBundle和包類添加內向FOSUserBundle擴展:

public function getParent() 
{ 
    return 'FOSUserBundle'; 
} 

然後創建窗體/類目錄,並創建名爲ProfileFormType一種新形式的類型和新的表單類型場所內:

namespace Acme\UserBundle\Form\Type; 

use Symfony\Component\Form\FormBuilderInterface; 
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType; 

class ProfileFormType extends BaseType {  

public function buildForm(FormBuilderInterface $builder, array $options)  
{   
    parent::buildForm($builder, $options);   

    // add your custom field   
    $builder->add('name');  
}  

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

之後,你需要新的形式添加到服務,如:

<services>   
    <service id="acme_user.profile.form.type" class="Acme\UserBundle\Form\Type\ProfileFormType"> 
     <tag name="form.type" alias="acme_user_profile" />    
     <argument>%fos_user.model.user.class%</argument>   
    </service>  
</services> 

最後添加到您的config.yml:

fos_user:  
    # ...  
    profile:  
     form:   
      type: acme_user_profile 

記住您當前的結構信息,以取代acmehttps://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_forms.md

+0

y,我知道它,我已經創建了我的formtype擴展fosuser,我的問題正是如何覆蓋父標籤(父類中的ex.child'user') – luxury

0

如果你想只重寫標籤,只是在app/Resources/FOSUserBundle/translations目錄中添加一個文件FOSUserBundle.xx.yml:

的更多信息可以在這裏找到。無需重寫整個捆綁包,即使它可以適當的進一步覆蓋...

如果您已經覆蓋了FOSUserBundle,請將文件添加到YourCustomFOSUserBundle/Resources/translations

複製您想要覆蓋的FOSUserBundle/Resources/translations/FOSUserBundle.xx.yml,並修改翻譯。您應該只在本文件中保留修改過的翻譯。

+0

它沒有提供翻譯選項上面的配置文件,我不認爲沒有人遇到這個問題,但我已經搜索了周圍沒有答案!我想爲我刪除或自定義父'用戶'表單標籤 – luxury

+0

,我只是手動呈現表單行以避免發生這種情況,它工作。 – luxury

+0

當然,如果你用form_row(form)渲染整個表單,你會得到一個表單本身的標籤......最好爲每一行編寫form_row,有時候,我只使用form_widget和form_errors .. – AlterPHP