Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/07/2015, 03:01
weltxo
 
Fecha de Ingreso: abril-2013
Mensajes: 75
Antigüedad: 11 años, 7 meses
Puntos: 2
FOSUserBundle edit profile

Hola amigos, me gustaría que me aclarasen una duda.

Estoy tratando de modificar la página 'editar perfil' del FOSUserBundle añadiendo mis atributos personalizados, cómo por ejemplo, nombre y apellidos reales, fecha de nacimiento, ciudad y género del usuario.

Por defecto, la página 'edit profile' incorpora los campos 'username' y 'email' para ser editados, además de incorporar el campo 'current password' que actúa cómo medida de seguridad para guardar los cambios.

En mi caso particular y por razones obvias, no me interesa que el usuario pueda editar su 'username'. Del mismo modo, al estar logueado, no veo útil tener que introducir su contraseña en 'current password' para que se apliquen los cambios.

¿Existe alguna manera de anular estas dos propiedades? Les muestro mi código

Entidad User (resumida)
Código:
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

class User extends BaseUser
{
    protected $id;
    protected $name;
    protected $surname;
    protected $birthday;
    protected $city;
    protected $genre;

    function getName() {
        return $this->name;
    }
    
    function setName($name) {
        $this->name = $name;
    }
}
el formulario ProfileFormType
Código:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class ProfileFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // add your custom field
        $builder->add('name', 'text', array(
                    'label' => 'Nombre',
                    'required' => false,
                    'attr' => array(
                        'placeholder' => 'Nombre',
                        'class'       => 'form-control',
                        'maxlength'   => '100'
                    )
                ));
    }

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

    public function getParent()
    {
        return 'fos_user_registration';
    }
}
la vista
Código:
{% trans_default_domain 'FOSUserBundle' %}

<form action="{{ path('fos_user_profile_edit') }}" {{ form_enctype(form) }} method="POST">
    {{ form_errors(form) }}
        
    <div class="control-group form-group">
        <div class="controls">
            {{ form_label(form.name) }}
            {{ form_widget(form.name) }}
        </div>
    </div>
    
    <div class="control-group form-group">
        <div class="controls">
            <input class="btn btn-success" type="submit" value="{{ 'profile.edit.submit'|trans }}" />
        </div>
    </div>
        
    {{ form_row(form._token) }}
</form>
registrar el servicio
Código:
services:
    my_user.profile.form.type:
            class: AH\UserBundle\Form\Type\ProfileFormType
            tags:
                - { name: form.type, alias: my_user_profile }
config.yml
Código:
fos_user:
    db_driver: orm
    firewall_name: main
    user_class: AH\UserBundle\Entity\User
    profile:
        form:
            type: my_user_profile