IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Problème formulaire en service


Sujet :

Symfony PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Problème formulaire en service
    Hello,

    Voila je suis entrain de migrer un projet symfony 2.8 en 3.2. Je rencontre un problème sur mes formulaire qui sont en "mode" service.

    Voici l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /projet/Controller/SessionController.php:79:string 'Catchable Fatal Error: Argument 1 passed to Symfony\Component\Form\Form::__construct() must be an instance of Symfony\Component\Form\FormConfigInterface, none given, called in /projet/app/cache/dev/appDevDebugProjectContainer.php on line 733 and defined' (length=273)
    d
    Voici le service formulaire que j'utilise :

    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
     
    parameters:
         customer.form.class: Symfony\Component\Form\Form
         customer.model.form_data_class: UserBundle\Form\Model\Customer
         customer.form.type.create.class: UserBundle\Form\Type\CreateCustomerFormType 
         customer.handler.create.class:  UserBundle\Form\Handler\CreateCustomerHandler
     
    services:            
     
         customer.create.form:
            class: %customer.form.class%
            factory_service: form.factory
            factory_method: createNamed
            arguments:
                - ""
                - "@customer.create.form.type"
                - null                            
                - { validation_groups: [Default] } 
     
         customer.create.form.type:
            class: %customer.form.type.create.class%
            arguments: [ %customer.model.form_data_class%, "POST" ]
     
         customer.create.handler:   
            class:        %customer.handler.create.class%
            arguments:   ["@customer.create.form", "@manager.customer"]
    Et dans le controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
     
            $customer = new Customer();
            $form = $this->get('customer.create.form');
            $formHandler = $this->get('customer.create.handler');
     
            $process = $formHandler->process($customer, $request);
    Donc je doit passer une instance "Symfony\Component\Form\FormConfigInterface" mais la je ne sais pas comment ... Quelqu'un aurai une idée ? Un Piste ?

    Merci d'avance pour l'aide apporté

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    quand tu étais sous sf2.8, est ce que tu as fais la chasse aux deprecated ?

    pour cela, faut naviguer de page en page en mode DEV. Pour chaque page ainsi visité, le profil Symfony (en bas de page) indique si il y a des deprecateds et en affiche la liste (avec le numéro de ligne... et un moyen de le résoudre).

    une fois que tous les deprecated ont été résolus, le passage en symfony 3 doit se faire sans douleur !

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour la réponse.

    Nous sommes entrain de migré l'ensemble des deprecated. J'espères que cela ne pausera plus de problème pour passé en SF3.

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bon dans la migration en 2.8 j'ai ce warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php.INFO: Passing type instances to FormBuilder::add(), Form::add() or the FormFactory is deprecated since version 2.8 and will not be supported in 3.0. Use the fully-qualified type class name instead
    Voici mon code :
    Controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $customer = new Customer();
    $form = $this->get('customer.create.form');
    $formHandler = $this->get('customer.create.handler');
    $process = $formHandler->process($customer, $request);
    Service :
    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
     
    parameters:
         customer.form.class: Symfony\Component\Form\Form
         customer.model.form_data_class: UserBundle\Form\Model\Customer
         customer.form.type.create.class: UserBundle\Form\Type\CreateCustomerFormType 
         customer.handler.create.class:  UserBundle\Form\Handler\CreateCustomerHandler
     
    services:            
     
         customer.create.form:
            class: %customer.form.class%
            factory_service: form.factory
            factory_method: createNamed
            arguments:
                - ""
                - "@customer.create.form.type"
                - null                            
                - { validation_groups: [Default] } 
     
         customer.create.form.type:
            class: %customer.form.type.create.class%
            arguments: [ %customer.model.form_data_class%, "POST" ]
            tags:
                - { name: form.type }
     
         customer.create.handler:   
            class:        %customer.handler.create.class%
            arguments:   [@customer.create.form, @manager.customer]
    FormType:
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    <?php
     
    namespace UserBundle\Form\Type;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolver;
    use Symfony\Component\Form\Extension\Core\Type\HiddenType;
     
    class CreateCustomerFormType extends AbstractType
    {
     
        protected $class;
     
        public function __construct($class)
        {
            $this->class         = $class;
        }
     
     
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('society')     
                    ->add('address')
                    ->add('zipCode')
                    ->add('city')
                    ->add('country')
                    ->add('fax')
                    ->add('phone')        
                    ->add('email')               
                    ->add('firstname')
                    ->add('lastname')         
                    ->add('language', HiddenType::class)         
                    ;                
     
     
        }
     
        public  function configureOptions(OptionsResolver $resolver)    {
     
            $resolver->setDefaults(array(
                'data_class' => $this->class,
                'method'     =>'POST',
                'csrf_protection' => true
            ));
        }
     
     
        public function getName()
        {
            return $this->getBlockPrefix();
        }
     
        public function getBlockPrefix()
        {
            return 'customer';
        }
    }
    Mon service handler :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    <?php
     
    namespace UserBundle\Form\Handler;
     
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Form\FormInterface;
     
    use UserBundle\Form\Model\Customer;
    use UserBundle\ModelManager\CustomerManager;
     
    class CreateCustomerHandler 
    {   
     
        protected $customerManager;
        protected $form;
     
     
        public function __construct(FormInterface $form, CustomerManager $customerManager)
        {      
            $this->customerManager    = $customerManager;
            $this->form           = $form;
     
        }
     
        public function process(Customer $customer, Request $request)
        {
            $process     = false;          
     
            if ('POST' == $request->getMethod()) 
            {
     
                $this->form->setData($customer);
     
                $this->form->handleRequest($request);
     
     
                if ($this->form->isValid())
                {    
     
                    $this->onSuccess($customer);  
                    $process = true;
                }
                else {
                    die('error');
                }
            }
     
            return $process;
     
        }
     
        private function onSuccess(Customer $customer) 
        {
            $this->customerManager->createCustomer($customer);
        }
     
    }
    Je ne comprend ce qu'il faut faire ... Je tourne en rond ...

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bon quand je réécrit mon code dans mon controller je n'ai plus de warning :

    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
     
    $customer = new Customer();
            $manager = $this->get('manager.customer');
            $form = $this->createForm(CreateCustomerFormType::class, $customer);
            $ar = array('form'=>$form, 'process'=> false);
            if ('POST' == $request->getMethod()) 
            {
                $form->setData($customer);
                $form->handleRequest($request);
                if ($form->isValid())
                {    
                   $manager->createCustomer($customer); 
                    $process = true;
                   $ar['process'] = $process;
                }
            }
    Cela m'embête car je doit réécrit tout mes formulaires et j'aurai bien aimé gardé mon système de service.

    Une piste pour la refacto avec mon ancien code ?

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/05/2008, 18h49
  2. problème formulaire tabulaire
    Par jax69 dans le forum Access
    Réponses: 2
    Dernier message: 05/09/2005, 11h28
  3. Problème avec mon service mysql et PhpMyAdmin
    Par Fixazo dans le forum Outils
    Réponses: 1
    Dernier message: 28/08/2005, 18h02
  4. Problème "The specified service does not exist as an ..
    Par Rimak2 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/05/2005, 21h24
  5. Problème Formulaire + popup + page PHP
    Par nesbla dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/02/2005, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo