2016-07-20 4 views
1

Я хотел бы настроить форму профиля пользователя в symfony2. Я сделал то, что знаю, но он не работает. здесь кодНастройка формы профиля пользователя

service.yml

services 
    meublestunis_user.form.profile: 
      class: UserBundle\Form\UserProfileFormType 
      arguments: [%fos_user.model.user.class%] 
      tags: 
       - { name: form.type, alias: edit_user_profile} 

config.yml

fos_user: 
    profile: 
      form: 
       type: edit_user_profile 

UserProfileForm.php

<?php 

namespace UserBundle\Form; 

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

class UserProfileFormType extends BaseType { 

    public function buildUserForm(FormBuilderInterface $builder, array $options) { 
     parent::buildUserForm($builder, $options); 
     $builder 
       ->add('nom', null) 
       ->add('prenom', null) 
       ->add('adresse', null) 
       ->add('sexe', null) 
       ->add('date_naissance', null) 
       ->add('ville', null) 
       ->add('mobile', null) 
       ->add('site_web', null) 
     ; 
    } 


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

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

} 

контроллер

//modification part 
     if (!is_object($user) || !$user instanceof UserInterface) { 
      throw new AccessDeniedException('This user does not have access to this section.'); 
     } 
     $dispatcher = $this->get('event_dispatcher'); 
     $event = new GetResponseUserEvent($user, $request); 
     $dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_INITIALIZE, $event); 
     if (null !== $event->getResponse()) { 
      return $event->getResponse(); 
     } 
     $formFactory = $this->get('meublestunis_user.form.profile'); 
     $editForm = $formFactory->createForm(); 
     $editForm->setData($user); 
     $editForm->handleRequest($request); 
     if ($editForm->isValid()) { 
      /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */ 
      $userManager = $this->get('fos_user.user_manager'); 
      $event = new FormEvent($editForm, $request); 
      $dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_SUCCESS, $event); 
      $userManager->updateUser($user); 
      if (null === $response = $event->getResponse()) { 
       $url = $this->generateUrl('show_user_profile'); 
       $response = new RedirectResponse($url); 
      } 
      $dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_COMPLETED, new FilterUserResponseEvent($user, $request, $response)); 
      return $response; 
     } 

ошибка Attempted to call an undefined method named "createForm" of class "UserBundle\Form\UserProfileFormType".

спасибо за помощь мне

+0

Почему с помощью сервиса создания формы в контроллере и свой собственный маршрут для обработки данных и обновления пользователя?. – mgh

+0

@MohammadGholami он хочет настроить форму FOSUserBundle, поэтому он должен использовать услугу – Ghasrfakhri

+0

Я делаю это для FOSUserBundle! – mgh

ответ

0

распространяется ли ваш UserBundle FosBundle?

namespace UserBundle; 

class UserBundle extends Bundle 
{ 
    public function getParent() 
    { 
     return 'FOSUserBundle'; 
    } 
} 

В вашем config.yml определить свою новую форму профиля, как это:

fos_user: 
    profile: 
     form: 
      type: UserBundle\Form\UserProfileFormType 
      name: edit_user_profile 
     validation_groups: [Profile, Default] 

 Смежные вопросы

  • Нет связанных вопросов^_^