2012-06-28 35 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