0

我写了一个表单类型扩展了forsuser ProfileFormType,但是每次我在模板中渲染它时,表单顶部应该总是有一个标签“用户”。我发现它来自原始 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));

它可以工作,但它不利于修改原始文件,如何在我的自定义表单类型或渲染时在模板中修改它?

4

2 回答 2

1

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

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

然后创建 Form/Type 目录并创建一个名为的新表单类型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

于 2012-06-28T04:40:09.380 回答
0

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

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

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

于 2012-06-28T08:39:07.073 回答