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
1 2 3 4
|
register:
pattern: /{_locale}/register
defaults: { _controller: UserBundle:User:register } |
Qui pointe sur la méthode register de mon controlleur User
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 :
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 :
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
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 :
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
Partager