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 に答える