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'
                ],
            ]
        );
    }
}
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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>
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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'])
            ]
        );
    }
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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');
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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);
                }
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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"
          ]
    ]
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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