如何覆盖ProfileFormType来编辑用户? Symfony2的

时间:2016-11-04 13:14:05

标签: symfony fosuserbundle method-overriding

我正在使用symfony2.I' m使用FOSUserBundle,所以我想覆盖编辑用户的FormType以向构建器添加名称。那我应该怎么做呢?

我所做的:

ProfileFormType:

<?php

namespace UserBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use FOS\UserBundle\Form\Type\ProfileFormType as BaseType;

class ProfileFormType extends BaseType {

    public function buildForm(FormBuilderInterface $builder, array $options) {
        parent::buildForm($builder, $options);
        // add your custom field
        $builder->add('name')
                ->add('roles', 'collection', array(
                    'type' => 'choice',
                    'options' => array(
                        'choices' => array(
                            'ROLE_ADMIN' => 'Admin'))))
                ->add('image', new ImageType())

        ;
    }

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

}

services.yml

user.edit.form.type:
    class: UserBundle\Form\Type\ProfileFormType
    arguments: [%fos_user.model.user.class%]
    tags:
        - { name: form.type, alias: user_edit_profile }

edit.html.twig

{% extends "UserBundle::layout.html.twig" %}


{% block body %}
    <center> <h1> Modification de profile </h1> </center>
    <aside class="col-sm-3">
        <div class="panel panel-default">
            <div class="panel-heading">Modification</div>
            <div class="panel-body">
                Veuillez remplir les champs 
            </div>
        </div>
    </aside>

    <!--timeline-->
    <section class="timeline col-sm-9">
        <!--post Timeline-->
        <div class="thumbnail thumbnail-post">
            <!--caption-->
            <div class="caption">


                <form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="form-horizontal">


                    <div class="form-group">

                        {{ form_errors(form.name) }}
                        <div class="col-sm-9">
                            Name   {{ form_widget(form.name, { 'attr': {'class': 'form-control', 'placeholder': 'form.name'|trans } }) }}
                        </div>

                    </div>



                    <div class="form-group">

                        {{ form_errors(form.email) }}
                        <div class="col-sm-9">
                            Email   {{ form_widget(form.email, { 'attr': {'class': 'form-control', 'placeholder': 'form.email'|trans } }) }}
                        </div>

                    </div>
                    <div class="form-group">

                        {{ form_errors(form.username) }}
                        <div class="col-sm-9">
                            Pseudo   {{ form_widget(form.username, { 'attr': {'class': 'form-control', 'placeholder': 'form.username'|trans } }) }}

                        </div>

                    </div>

                    <div class="form-group">

                        {{ form_errors(form.current_password) }}
                        <div class="col-sm-9">
                            Mot de passe actuelle   {{ form_widget(form.current_password, { 'attr': {'class': 'form-control', 'placeholder': 'form.current_password'|trans } }) }}

                        </div>

                    </div>


                    </br>



                    {{ form_rest(form) }}


                    <div class="form-group">
                        <div class="col-md-4 col-sm-4 col-xs-12 col-md-offset-3">
                            <input class="btn btn-default submit" type="submit" value="{{ 'registration.submit'|trans }}">
                        </div>
                    </div>
                </form>
            </div> <!--#caption-->


            <!--#post timeline-->
        </div>
        <!--#timeline-->
    </section>





{% endblock %}

{% block js %}

    <script>
        $(document).ready(function () {

            $('#roles').hide();
        });


    </script>


{% endblock %} 

我收到此错误:

  

财产&#34;名称&#34;也不是其中一种方法&#34; name()&#34;,   &#34;的getName()&#34; /&#34; isname()&#34;或&#34; __ call()&#34;存在并有公共访问权限   class&#34; Symfony \ Component \ Form \ FormView&#34;在   FOSUserBundle:简介:第28行的edit.html.twig。

我该如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

更新您的服务文件:

user.edit.form.type:
    class: UserBundle\Form\Type\ProfileFormType
    arguments: [%fos_user.model.user.class%]
    decorates: fos_user.profile.form.type
    tags:
        - { name: form.type, alias: user_edit_profile }

fos_user.profile.form.type 是指我们的服务名称,它将替换名为user.edit.form.type

的服务

添加use Symfony\Component\Form\FormBuilderInterface;

你得到错误:

Neither the property "name" nor one of the methods "name()", "getname()"/"isname()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView" in FOSUserBundle:Profile:edit.html.twig at line 28.

由于fos_user_user表没有名称字段。如果你想在表格中添加字段whitch,你应该在实体中添加字段生成getter和setter,最后创建新的迁移和迁移。

答案 1 :(得分:0)

profile:
        form:
            type: fos_user_profile

它需要在fos的config.yml