覆盖Fos用户配置文件表单标签

时间:2012-06-28 04:00:09

标签: php forms symfony label fosuserbundle

我写了一个formtype扩展了forsuser ProfileFormType,但每次我在模板中渲染它时,应该总是在表单顶部出现一个标签“User”。我发现它来自原始的fosuser ProfileFormType:

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或模板中修改它?

2 个答案:

答案 0 :(得分:1)

您需要通过创建自己的FOSUserBundle来扩展UserBundle,并在Bundle类中添加:

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

请记住将acme替换为您当前的结构信息。

可在以下网址找到更多信息:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_forms.md

答案 1 :(得分:0)

如果您只想覆盖标签,只需在app/Resources/FOSUserBundle/translations目录中添加FOSUserBundle.xx.yml文件即可。无需覆盖整个捆绑包,即使它可能适合进一步覆盖...

如果您已经覆盖了FOSUserBundle,请在YourCustomFOSUserBundle/Resources/translations中添加该文件!

从您要覆盖的FOSUserBundle/Resources/translations/FOSUserBundle.xx.yml复制它,并修改翻译。您应该只在此文件中保留修改后的翻译。