0

Je continue d'obtenir une erreur en essayant de remplacer le modèle d'enregistrement de sonate. J'ai étendu l'ensemble d'utilisateurs Sonata avec EasyExtendsBundle, donc j'ai maintenant src/Application/Sonata/UserBundle.Impossible de remplacer le formulaire d'enregistrement du groupe d'utilisateurs Sonata

EDIT: Symfony 2.7, Sonata 2.3 Administrateur, Sonata utilisateur dev-maître

J'ai ajouté un champ dans mon Entité Utilisateur UserEntity.php

<?php 

/** 
* This file is part of the <name> project. 
* 
* (c) <yourname> <youremail> 
* 
* For the full copyright and license information, please view the LICENSE 
* file that was distributed with this source code. 
*/ 

namespace Application\Sonata\UserBundle\Entity; 

use Sonata\UserBundle\Entity\BaseUser as BaseUser; 

/** 
* This file has been generated by the Sonata EasyExtends bundle (http://sonata-project.org/bundles/easy-extends) 
* 
* References : 
* working with object : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/working-with-objects/en 
* 
* @author <yourname> <youremail> 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @var integer $id 
    */ 
    protected $id; 

    /* 
    * @ORM\Column(type="string", length=255) 
    * 
    * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"}) 
    */ 
    protected $age; 

    /** 
    * Get id 
    * 
    * @return integer $id 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    public function getAge() 
    { 
     return $this->age; 
    } 

     public function setAge($age) 
    { 
     $this->age = $age; 
    } 
} 

J'ai ensuite créé une nouvelle RegisterForm Application/Sonata/UserBundle/Form/Type/RegisterType.php

<?php 

namespace Application\Sonata\UserBundle\Form\Type; 

use FOS\UserBundle\Form\Type\RegistrationFormType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class RegisterType extends RegistrationFormType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     parent::buildForm($builder, $options); 

     $builder 
      ->add('age'); 
    } 

    public function setDefaultOption(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'validation_groups' => array('Default', 'Register') 
     )); 
    } 

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

Je dis sonata_user utiliser mon formulaire config.yml

sonata_user: 
    profile: 
     register: 
      form: 
       type:    front_user_registration 
       handler:   sonata.user.profile.form.handler.default 
       name:    front_user_registration_form 

fos_user: 
    db_driver:  orm # can be orm or odm 
    firewall_name: main 

    # if you change the class configuration, please also alter the sonata_user.yml file 
    user_class:  Application\Sonata\UserBundle\Entity\User 

    group: 
     group_class: Application\Sonata\UserBundle\Entity\Group 
     group_manager: sonata.user.orm.group_manager 

    service: 
     user_manager: sonata.user.orm.user_manager 
    registration: 
     form: 
      type: front_user_registration 
    profile: 
     form: 
      type:    fos_user_profile 
      handler:   fos_user.profile.form.handler.default 
      name:    fos_user_profile_form 
      validation_groups: [Authentication] 

que je déclare en tant que service services.yml

user.form.register.type: 
     class: Application\Sonata\UserBundle\Form\Type\RegisterType 
     parent: fos_user.registration.form.type 
     tags: 
      - { name: form.type, alias: front_user_registration } 

Lorsque je tente d'afficher la formulaire, j'obtiens l'erreur suivante:

Catchable Fatal Error: Argument 1 passed to Sonata\UserBundle\Form\Handler\ProfileFormHandler::process() must implement interface FOS\UserBundle\Model\UserInterface, boolean given, called in /Users/sylv/Sites/generajobs/vendor/sonata-project/user-bundle/Controller/RegistrationFOSUser1Controller.php on line 49 and defined

va de même si j'ajoute

arguments: [%fos_user.model.user.class%] 

dans ma configuration services.yml.

Ai-je raté quelque chose ici?

+0

Essayez ceci. [http://stackoverflow.com/same_issue](http://stackoverflow.com/questions/17279497/sonatauserbundle-override-form-profile) Voici le formulaire de profil de remplacement. Ça a l'air pareil. – maches

+0

Merci pour votre réponse, malheureusement, il remplace la plupart du formulaire de profil. Pour le formulaire d'inscription, il utilise le même code que ci-dessus, avec la même déclaration dans le fichier services.yml, ce qui me conduit à la même erreur :( – sylzys

Répondre

1

Ce fut une erreur assez stupide, je devais changer ma ligne « gestionnaire » dans config.yml à

handler:   sonata.user.registration.form.handler.default 

au lieu de sonata.user.profile.form.handler.default comme je l'ai vu sur plusieurs exemples sur SO

Les deux gestionnaires process() fonction ne sont pas les mêmes paramètres.