2015-04-24 1 views
0

J'essaye de créer un simple CRUD dans Zf2 pour le connaître et j'ai des problèmes pour router le seul contrôleur que j'ai. J'ai cette erreur "L'automate demandé n'a pas pu être mappé à une classe de contrôleur existante"Problèmes de routage dans ZF2: contrôleur non mappé

Je suis en train d'appeler cette voie: http://zf2.local/Listapp

Ceci est ma structure: module/Listapp/src/Listapp/Controller/ListappController.php

L'espace de noms est namespace Listapp\Controller;

Ceci est ma config autoloader:

public function getAutoloaderConfig() 
{ 
    return array(
     'Zend\Loader\StandardAutoloader' => array(
      'namespaces' => array(
       // Autoload Listapp classes 
       __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, 
       // Autoload ListappController classes 
       'ListappController' => __DIR__ . '/src/Listapp', 
      ) 
     ) 
    ); 
} 

Et ceci est mon module.config.php:

return array(
'controllers' => array(
    'invokables' => array(
     'Listapp\Controller\Listapp' => 'Listapp\Controller\ListappController' 
    ) 
), 

'router' => array(
    'routes' => array(
     'listapp' => array(
      'type' => 'segment', 
      'options' => array(
       'route' => '/[:controller[/:action][/:id]]', 
       'constraints' => array(
        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        'id'  => '[0-9]+', 
       ), 
       'defaults' => array(
        'controller' => 'Listapp\Controller\Listapp', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
    ), 
), 

'view_manager' => array(
    'template_path_stack' => array(
     'Listapp' => __DIR__ . '/../view', 
    ), 
),); 

Toute aide serait appréciée merci!

EDIT: Voici le code dans mon contrôleur (moins les autres fonctions de CRUD):

namespace Listapp\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 

class ListappController extends AbstractActionController 
{ 
    public function indexAction() 
    { 
    } 
} 
+0

Pouvez-vous poster le code Listapp? – gafreax

+1

Cela fonctionne-t-il si vous modifiez la clé du contrôleur listapp dans vos invocables de Listapp \ Controller \ Listapp à juste Listapp? –

+0

Oui ça a marché! Merci beaucoup ! – Tuck

Répondre

2

Donc, juste pour expliquer davantage mon commentaire, en incluant un segment :controller dans votre itinéraire, vous avez dit ZF pour essayer de faire correspondre la première chose de votre URL à quelque chose que le gestionnaire du contrôleur peut charger (dans votre cas, l'une des clés de votre contrôleur invokables). Le contrôleur par défaut que vous avez défini dans votre itinéraire ne s'applique que si vous avez visité http://zf2.local/.

Donc, pour vous, le plus rapide solution est de changer votre configuration:

'controllers' => array(
    'invokables' => array(
     'Listapp' => 'Listapp\Controller\ListappController' 
    ) 
), 

« Listapp » dans l'URL sera alors correspondre à ce contrôleur, et tout fonctionnera comme prévu.

En général, il rend les choses plus claires si vous évitez d'utiliser :controller dans les routes et ont au moins une route à la place par contrôleur, par exemple .:

'controllers' => array(
    'invokables' => array(
     'Listapp\Controller\Listapp' => 'Listapp\Controller\ListappController' 
    ) 
), 
'router' => array(
    'routes' => array(
     'listapp' => array(
      'type' => 'segment', 
      'options' => array(
       'route' => '/listapp[/:action[/:id]]', 
       'constraints' => array(
        'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        'id'  => '[0-9]+', 
       ), 
       'defaults' => array(
        'controller' => 'Listapp\Controller\Listapp', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
    ), 
), 
+0

Après avoir essayé votre exemple et supprimé le ': controller', j'ai cette erreur: L'URL demandée n'a pas pu être trouvée par le routage. – Tuck

+0

J'ai changé le 'L' de listapp pour être en minuscules dans mon exemple (les URL IMO devraient généralement être en minuscules), ce qui peut être le seul problème. Essayez 'http: // zf2.local/listapp' –

+0

C'était le problème. Merci encore ! Cela fonctionne très bien maintenant. – Tuck