Mon projet est basé sur Symfony 3 et j'ai installé et configuré FOSUserBundle en version 2, dont hérite mon UserBundle. J'ai ainsi pu créer un utilisateur. Cependant, pour les besoins de mon projet, j'ai surchargé le RegistrationFormType afin de rajouter les champs correspondant aux attributs spécifiques à mon entité User.
Respectant la structure de FOSUser:
<?php
// src/UserBundle/Form/Type\RegistrationFormType.php
namespace UserBundle\Form\Type;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use UserBundle\Repository\GenderRepository;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use EventBundle\Entity\Theme;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\AbstractType;
class RegistrationFormType extends AbstractType
{
/**
* @var string
*/
private $class;
/**
* @param string $class The User class name
*/
public function __construct($class)
{
$this->class = $class;
}
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->remove('username');
$builder
/*->add('email', EmailType::class, array(
'label' => 'form.email',
'translation_domain' => 'FOSUserBundle'
))
->add('username', null, array(
'label' => 'form.username',
'translation_domain' => 'FOSUserBundle'))
->add('plainPassword', RepeatedType::class, array(
'type' => PasswordType::class,
'invalid_message' => 'Les champs de mot de passe de correspondent pas.',
'options' => array('attr' => array('class' => 'password-field')),
'first_options' => array('label' => 'Mot de passe :'),
'second_options' => array('label' => 'Confirmer le mot de passe :')
))*/
->add('name', TextType::class)
->add('nickname', TextType::class)
->add('birthDate', BirthdayType::class, array(
'format' => 'dd-MM-yyyy',
'label'
))
->add('about_me', TextareaType::class)
->add('childrenNumber', IntegerType::class)
->add('gender', EntityType::class, array(
'class' => 'UserBundle:Gender',
'choice_label' => 'gender',
'multiple' => false,
'expanded' => true
))
->add('themes', EntityType::class, array(
'class' => 'EventBundle\Entity\Theme',
'choice_label' => 'title',
'multiple' => true,
'expanded' => true,
'empty_data' => true
))
->add('save', SubmitType::class, array(
'label' => 'Enregistrer'
))
;
}
/**
* {@inheritdoc}
*/
public function getParent()
{
return 'FOS\UserBundle\Form\Type\RegistrationFormType';
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'xproject_user_registration';
}
}
mon entité User:
<?php
namespace UserBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Component\Validator\Constraints as Assert;
/**
* User
*
* @ORM\Table(name="fos_user")
* @ORM\Entity(repositoryClass="UserBundle\Repository\UserRepository")
*/
class User extends BaseUser
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
protected $name;
/**
* @var string
*
* @ORM\Column(name="nickname", type="string", length=255)
*/
protected $nickname;
/**
* @var \Datetime
*
* @ORM\Column(name="birth_date", type="datetime")
*/
protected $birthDate;
/**
* @var \Datetime
*
* @ORM\Column(name="inscription_date", type="datetime")
*/
protected $inscriptionDate;
/**
* @var text
*
* @ORM\Column(name="about_me", type="text")
*/
protected $about_me;
/**
* @ORM\ManyToOne(targetEntity="UserBundle\Entity\Gender")
*/
protected $gender;
/**
* @var boolean
*
* @ORM\Column(name="admin", type="boolean")
*/
protected $admin;
/**
* @var integer
*
* @ORM\Column(name="children_number", type="integer")
*/
protected $childrenNumber;
/**
* @ORM\ManyToMany(targetEntity="EventBundle\Entity\Theme", mappedBy="users")
*/
protected $themes;
/**
* @ORM\ManyToMany(targetEntity="UserBundle\Entity\User", mappedBy="myFriends")
*/
//protected $friendsWithMe;
/**
* @ORM\ManyToMany(targetEntity="UserBundle\Entity\User", inversedBy="friendsWithMe")
* @ORM\JoinTable(name="friends",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="friend_user_id", referencedColumnName="id")}
* )
*/
//protected $myFriends;
/**
* User constructor
*/
public function __construct()
{
parent::__construct();
$this->enabled = false;
$this->roles = array();
$this->friendsWithMe = new \Doctrine\Common\Collections\ArrayCollection();
$this->myFriends = new \Doctrine\Common\Collections\ArrayCollection();
$this->inscriptionDate = new \Datetime();
}
/**
* Set the email
*
* @param string $email
* @return User
*/
public function setEmail($email)
{
return parent::setEmail($email);
}
/**
* Set name
*
* @param string $name
*
* @return User
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set nickname
*
* @param string $nickname
*
* @return User
*/
public function setNickname($nickname)
{
$this->nickname = $nickname;
return $this;
}
/**
* Get nickname
*
* @return string
*/
public function getNickname()
{
return $this->nickname;
}
/**
* Set birthDate
*
* @param \datetime $birthDate
*
* @return User
*/
public function setBirthDate(\datetime $birthDate)
{
$this->birthDate = $birthDate;
return $this;
}
/**
* Get birthDate
*
* @return \datetime
*/
public function getBirthDate()
{
return $this->birthDate;
}
/**
* Set inscriptionDate
*
* @param \datetime $inscriptionDate
*
* @return User
*/
public function setInscriptionDate(\datetime $inscriptionDate)
{
$this->inscriptionDate = $inscriptionDate;
return $this;
}
/**
* Get inscriptionDate
*
* @return \datetime
*/
public function getInscriptionDate()
{
return $this->inscriptionDate;
}
/**
* Set aboutMe
*
* @param string $aboutMe
*
* @return User
*/
public function setAboutMe($aboutMe)
{
$this->about_me = $aboutMe;
return $this;
}
/**
* Get aboutMe
*
* @return string
*/
public function getAboutMe()
{
return $this->about_me;
}
/**
* Set admin
*
* @param boolean $admin
*
* @return User
*/
public function setAdmin($admin)
{
$this->admin = $admin;
return $this;
}
/**
* Get admin
*
* @return boolean
*/
public function getAdmin()
{
return $this->admin;
}
/**
* Set childrenNumber
*
* @param integer $childrenNumber
*
* @return User
*/
public function setChildrenNumber($childrenNumber)
{
$this->childrenNumber = $childrenNumber;
return $this;
}
/**
* Get childrenNumber
*
* @return integer
*/
public function getChildrenNumber()
{
return $this->childrenNumber;
}
/**
* Set gender
*
* @param \UserBundle\Entity\Gender $gender
*
* @return User
*/
public function setGender(\UserBundle\Entity\Gender $gender = null)
{
$this->gender = $gender;
return $this;
}
/**
* Get gender
*
* @return \UserBundle\Entity\Gender
*/
public function getGender()
{
return $this->gender;
}
/**
* Add friendsWithMe
*
* @param \UserBundle\Entity\User $friendsWithMe
*
* @return User
*/
/*public function addFriendsWithMe(\UserBundle\Entity\User $friendsWithMe)
{
$this->friendsWithMe[] = $friendsWithMe;
return $this;
}
/**
* Remove friendsWithMe
*
* @param \UserBundle\Entity\User $friendsWithMe
*/
/*public function removeFriendsWithMe(\UserBundle\Entity\User $friendsWithMe)
{
$this->friendsWithMe->removeElement($friendsWithMe);
}
/**
* Get friendsWithMe
*
* @return \Doctrine\Common\Collections\Collection
*/
/*public function getFriendsWithMe()
{
return $this->friendsWithMe;
}
/**
* Add myFriend
*
* @param \UserBundle\Entity\User $myFriend
*
* @return User
*/
/*public function addMyFriend(\UserBundle\Entity\User $myFriend)
{
$this->myFriends[] = $myFriend;
return $this;
}
/**
* Remove myFriend
*
* @param \UserBundle\Entity\User $myFriend
*/
/*public function removeMyFriend(\UserBundle\Entity\User $myFriend)
{
$this->myFriends->removeElement($myFriend);
}
/**
* Get myFriends
*
* @return \Doctrine\Common\Collections\Collection
*/
/*public function getMyFriends()
{
return $this->myFriends;
}
/**
* Add theme
*
* @param \EventBundle\Entity\Theme $theme
*
* @return User
*/
public function addTheme(\EventBundle\Entity\Theme $theme)
{
$this->themes[] = $theme;
return $this;
}
/**
* Remove theme
*
* @param \EventBundle\Entity\Theme $theme
*/
public function removeTheme(\EventBundle\Entity\Theme $theme)
{
$this->themes->removeElement($theme);
}
/**
* Get themes
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getThemes()
{
return $this->themes;
}
}
Dans UserBundle\Resources\ j'ai créé les fichiers:
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
- { resource: "@EventBundle/Resources/config/services.yml" }
- { resource: "@UserBundle/Resources/config/services.yml" }
#- { resource: "@UserBundle/Resources/config/validation.yml" }
#- { resource: "@UserBundle/Resources/config/registration.yml" }
#- { resource: "@UserBundle/Resources/config/profile.yml" }
- { resource: "@CoreBundle/Resources/config/services.yml" }
#- { resource: "@UserBundle/Resources/FOSUserBundle/config/validation.yml" }
# - { resource: "@EventBundle/Resources/config/admin.yml" }
# Put parameters here that don't need to change on each machine where the app is deployed
# http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
locale: fr
framework:
#esi: ~
translator: { fallbacks: ["%locale%"] }
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
#serializer: { enable_annotations: true }
templating:
engines: ['twig']
default_locale: "%locale%"
trusted_hosts: ~
trusted_proxies: ~
session:
# http://symfony.com/doc/current/reference/configuration/framework.html#handler-id
handler_id: session.handler.native_file
save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
fragments: ~
http_method_override: true
assets: ~
php_errors:
log: true
# Twig Configuration
twig:
form_themes:
- 'bootstrap_3_horizontal_layout.html.twig'
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/data/data.db3"
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
# path: "%database_path%"
orm:
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
fos_user:
db_driver: orm # Le type de BDD à utiliser, nous utilisons l'ORM Doctrine depuis le début
firewall_name: main # Le nom du firewall derrière lequel on utilisera ces utilisateurs
user_class: UserBundle\Entity\User # La classe de l'entité User que nous utilisons
registration:
form:
type: UserBundle\Form\Type\RegistrationFormType
profile:
form:
type: UserBundle\Form\Type\ProfileType
from_email:
address: webmaster@xproject.fr
sender_name: webmaster
#service:
#user_manager: xproject_user.user_manager
#sonata_block:
# default_contexts: [cms]
# blocks:
# # enable the SonataAdminBundle block
# sonata.admin.block.admin_list:
# contexts: [admin]
Quant à mon message d'erreur: le Log:
Logs
1 error
INFO - Matched route "fos_user_registration_register".
INFO - Populated the TokenStorage with an anonymous Token.
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ValidateRequestListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
DEBUG - SELECT t0.id AS id_1, t0.name AS name_2 FROM category t0
DEBUG - SELECT t0.id AS id_1, t0.title AS title_2, t0.description AS description_3, t0.category_name AS category_name_4, t0.category_id AS category_id_5 FROM theme t0
J'ai plusieurs idées, comme de surcharger le UserManager, ou le FormFactory, ou le form handler, mais je m'y perds. Je crois que des informations, des options, ne sont pas transmises, ou pas valables pour le builder du formulaire surchargé... Quelqu'un peut-il m'aider svp? surtout, quelqu'un comprend-t-il le problème? - Merci
Hello, peux tu faire plutot un printscreen de tes logs, car là c'est illisible
Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)
En effet, tu as mis label sans rien, il traduit donc ton tableau de la manière suivante :
[
'format' => 'dd-MM-yyyy',
0 => 'label'
]
Ce qui pose le soucis Donc vire le label ou rempli le
Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)
Tu as fais ce que j'ai mis dans le précédent message? ça ta résolu ton soucis?
Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)
Hello! Merci, @Pepsy, pour ton coup de main! C'était bien ça le problème!
Maintenant, à force de bidouiller, j'ai un problème d'affichage. L'héritage de template ne s'effectue plus. Je vais chercher un peu par moi-même et si je ne m'en sors pas, j'exposerai le problème.
Faudra-t-il créer un autre sujet? Parce que ce n'est plus exactement le même problème! Le sujet actuel peut-il être considéré comme résolu? Je n'ai pas trop l'habitude d'en créer sur les forums... -Merci encore énormément! c'est fou ce à côté de quoi on peut passer, la tête dans le guidon!!
Tu peux mettre se projet en résolu oui, ensuite tu fais un autre Sujet pour ton second problème. Mets bien l'arborescence de tes fichiers dans le nouveau sujet, car ça sera utile sur le coup
Bonne journée
Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)
ça marche! merci encore!! Bonne journée à toi aussi!
Override du RegistrationFormType de FOSUserBundle
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)
Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)
Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)
Je donnes des cours particulier ici et je suis également mentor OpenClassrooms (Premium Plus et en charge de la Premium Class PHP/Symfony). Un petit j'aime si je vous ai aidé fais toujours plaisir :)