Bonjour,

je continue difficilement mon apprentissage de symfony2

Après avoir enfin réussi à faire le système de connexion avec FOSUserBundle, je m'attaque donc a l'inscription et je bloque...

Je tente de créer mon propre formulaire en me basant sur la même entité User de mon système de connexion mais je n'arrive pas a étendre le formulaire du bundle fos

J'ai créer un route :

app\config\routing.yml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
register:
    pattern:   /{_locale}/register
    defaults:  { _controller: UserBundle:User:register }
Qui pointe sur la méthode register de mon controlleur User

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
<?php
namespace devance\UserBundle\Controller;
 
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use devance\UserBundle\Entity\User;
 
class UserController extends Controller
{
    public function loginAction()
    {
        $request = $this->getRequest();
        $session = $request->getSession();
        // get the login error if there is one
        if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
            $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
        } else {
            $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
            $session->remove(SecurityContext::AUTHENTICATION_ERROR);
        }
        return $this->render('UserBundle:Security:login.html.twig', array(
            'url_redirect' => $request->headers->get('referer'),
            'error'         => $error,
        ));
    }
 
	public function registerAction()
    {
		$user = new User();
 
 
		 $formBuilder = $this->createFormBuilder($user)
                 ->add('status',        'text')
                 ->add('country',       'text')
                 ->add('jobtitle',      'text')
                 ->add('presentation', 'text');
 
		$form = $formBuilder->getForm();
		return $this->render('UserBundle:Security:register.html.twig', array(
			'form' => $form->createView(),
		 ));
 
	}
}
Aussi dans mon fichier

app\config\config\yml j'ai ajouté ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
services :
    devance_user.registration.form.type:
        class: devance\UserBundle\Form\Type\RegistrationFormType
        argument: [%fos_user.model.user.class%]
        tags:
            -  { name: form.type, alias: devance_user_registration }
 
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 duquel on utilisera ces utilisateurs
    user_class:    devance\UserBundle\Entity\User # La classe de l'entité User que nous venons de définir
    registration:
        form:
            type: devance_user_registration
Enfin voici mon template :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
{% extends "::base.html.twig" %}
{% block body %}
<h3>Formulaire d'inscription</h3>
<div class="well">
    <form method="post" {{ form_enctype(form) }}>
        {{ form_widget(form) }}
        <input type="submit" class="btn btn-primary" />
    </form>
</div>
{% endblock %}
Alors effectivement mon formulaire est affiché mais il ne fait rien et ne semble pas attaché a FosUser, car dans leur documentations ils disent de créé un fichier RegistrationFormType

Donc j'ai fait un fichier
UserBundle\Form\Type\RegistrationFormType.php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
namespace devance\UserBundle\Form\Type;
 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;
 
class RegistrationFormType extends BaseType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
		parent::buildForm($builder, $options);
		$builder
		  ->add('country', null, array('attr' => array('class' => 'inputText')))
		  ->add('prenom', null, array('attr' => array('class' => 'inputText')));
		;
    }
 
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'davance\UserBundle\Entity\User'
        ));
    }
 
    public function getName()
    {
        return 'devance_user_registration';
    }
}
et du coup je remet ma route par défaut : fos_user_registration_register

et ca m'afffiche l'erreur suivante :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
Warning: Missing argument 1 for FOS\UserBundle\Form\Type\RegistrationFormType::__construct(), called in C:\wamp\www\devance\app\cache\prod\appProdDebugProjectContainer.php on line 225 and defined in C:\wamp\www\devance\vendor\friendsofsymfony\user-bundle\FOS\UserBundle\Form\Type\RegistrationFormType.php line 25
Je suis complétement perdu