Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-02-2016 10:53:38

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

[resolu]Problème de Render

Bonjour,

J'ai un problème dans l'utilisation d'un formulaire en modal. Quand je clique sur mon bouton dans ma vue, ma modal renvois une erreur

"Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for Suivi\Form\MaintenanceForm"

J'ai simplifié au maximum mon formulaire pour trouver d'où pouvait venir l'erreur mais je trouve pas du tout !

Voici mon formulaire:

Code:

[lang=php]<?php
 
namespace Suivi\Form;
 
use Zend\Form\Form;
 
class MaintenanceForm extends Form
{
    public function __construct()
    {
        parent::__construct('maintenance');
 
        $this->add(
            [
                'name'       => 'submit',
                'type'       => 'submit',
                'attributes' => [
                    'value' => 'Valider',
                    'class' => 'btn btn-success center-block',
                    'id'    => 'graph-submit'
                ],
            ]
        );
    }
}

Voici maintenant comment il est appelé dans ma vue (les .js semblent ok vu que ma modal s'ouvre mais j'ai mon petit retour "Une erreur est survenue".

Code:

[lang=php]
<a href="<?php echo $this->url('suivi/maintenance', ['action' => 'add']); ?>"
           data-trigger="modal"
           class="btn inblue-btn btn-success inblue-btn-submit"><?php echo $this->translate(
                'Ajouter une maintenance'
            ); ?></a>

Et pour finir le controller

Code:

[lang=php]
/**
     * Action add
     * Ajoute une maintenance pour un véhicule
     *
     * @return ViewModel
     */
    public function addAction()
    {
        /** @var \Zend\Http\Request $request */
        $request = $this->getRequest();
        if (!$request->isXmlHttpRequest()) {
            return $this->redirect()->toRoute('suivi/maintenance');
        }
 
        $form        = $this->getServiceLocator()->get('Suivi\Form\MaintenanceForm');
        $restService = $this->getServiceLocator()->get('RestService');
 
        /** @var \Zend\Http\Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $maintenance = new Maintenance();
            $form->setInputFilter($maintenance->getInputFilter());
            $form->setData($request->getPost()); //->toArray());
 
            if ($form->isValid()) {
 
                $maintenance->exchangeArray($form->getData());
 
                $restService->call(
                    'inblue/maintenance',
                    $maintenance->toRest(),
                    \Zend\Http\Request::METHOD_POST
                );
 
                return new JsonModel(['redirect_route' => $this->url()->fromRoute('suivi/maintenance')]);
            }
        }
 
        return $this->modal(
            [
                'title'         => 'Ajouter une maintenance',
                'body'          => $form,
                'confirmButton' => 'Ajouter',
                'routeAction'   => $this->url()->fromRoute('suivi/maintenance', ['action' => 'add'])
            ]
        );
    }

J'ai d'autres formulaires où j'effectue la même chose et ça fonctionne. Enfin j'imagine qu'il y a un truc qui diffère quelque part.

Si quelqu'un a une idée pour m'aiguiller, merci beaucoup big_smile, bonne journée !

Dernière modification par zigo (25-02-2016 14:06:28)

Hors ligne

 

#2 24-02-2016 15:02:09

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: [resolu]Problème de Render

Bonjour,

ce qui nous aiderait a te debugger, c'est ta config ou il est déclaré. La clé form_elements en gros. Est il en invokables déclaré correctement ?

D'autre part, j'ai un doute sur ton utilisation du service manager pour récupérer ton formulaire, je pense que ce n'est pas ton service manager qui à la tâche de cela, mais plutot ton formManager

Donc en gros tu dois faire :

Code:

$serviceLocator->get('formElementManager')->get('Suivi\Form\MaintenanceForm');

Testes cela et fait nous un retour.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#3 24-02-2016 17:09:13

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

Re: [resolu]Problème de Render

Merci de ta réponse, j'ai trouvé le problème entre temps. Je n'avais pas déclaré le formulaire dans mon Module.php et la function getServiceConfig

En ajoutant ça

Code:

'Suivi\Form\MaintenanceForm' => function (ServiceLocatorInterface $serviceLocator) {
                    return new MaintenanceForm($serviceLocator);
                }

Tout fonctionne ! ma modal s'ouvre correctement avec mon formulaire.

Tu penses que l'utilisation de service manager dans ce contexte n'est pas bonne ? J'avais mis un formulaire simplifié pour l'exemple mais ça change peut être rien.

Hors ligne

 

#4 25-02-2016 11:43:10

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [resolu]Problème de Render

Hello, c'est pas au service manager de s'occuper de la création des formulaires mais au plugin manager : FormElementManager.

Donc ça doit être dans la clé form_elements effectivement. Ensuite l'utilisation de fonction anonymes pour ça c'est pas la bonne solution et enfin utilises le fichier de configuration wink. Il y a plein de sujet qui expliquent comment bien le faie ici.

Hors ligne

 

#5 25-02-2016 12:54:21

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: [resolu]Problème de Render

Oui comme dit Orkin évites les fonction anonyme, cela fait péter le cache de ta config.

Il faudrait plutôt utiliser une factory sous la clé

Code:

 [lang=php]
<?php

return [
   "form_elements" => [
         "factories" => [
              "ta_clé" => "FQCN de ta factorie pour ton form"
          ]
    ]

et ton service locator via la clé formElementManager appellerai cette factory.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#6 25-02-2016 14:06:09

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

Re: [resolu]Problème de Render

Okay merci à vous !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages