Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 21-05-2013 15:07:29

akrogames
Membre
Date d'inscription: 22-03-2010
Messages: 27

Problème de route : Class not found

Bonjour à tous,

Tout d'abord je tiens à préciser que je tente d'utiliser ZF2 par curiosité pour voir ce qui a été amélioré. C'est vrai que l'ajout des namespace est un plus catégorique. Toutefois et même après avoir lu des sujets sur ce forum et la doc' ZF2, je n'arrive pas à configurer mes routes.

Voici mon arborescence :
+AL
-+config
---application.config.php
--+autoload
---global.php
-+library
-+modules
--+alws
---+configs
----module.config.php
---+src
----+Alws
-----+controllers
AlwsController.php
-----+models
---+views
----+alws
-----+alws
------index.phtml
----+error
-----index.phtml
-----404.phtml
----+layout
-----layout.phtml
----Module.php
----autoload_classmap.php
-+public
--+css
--+img
--+js
---index.php


Voilà mon arbo, j'espère que vous pourrez m'aider, voici mes fichiers de configs :

module.config.php :

Code:

<?php
Zend\Debug\Debug::dump("MODULE CONFIG => ".__NAMESPACE__);

$config =  array(
    'controllers' => array(
        'invokables' => array(
            'Alws' => 'Alws\controllers\AlwsController',
        ),
    ),
    'router' => array(
        'routes' => array(
            'alws' => array(
                'type'    => 'Literal',
                'options' => array(
                    'route'    => '/',
                    'defaults' => array(
                        '__NAMESPACE__' => 'Alws',
                        'controller'    => 'Alws',
                        'action'        => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'default' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/[:controller[/:action]]',
                            'constraints' => array(
                                'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
    
    'view_manager' => array(
        'template_path_stack' => array(
            'alws' => __DIR__ . '/../views',
        ),
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
            'layout/layout'           => __DIR__ . '/../views/layout/layout.phtml',
            'alws/alws/index'           => __DIR__ . '/../views/alws/alws/index.phtml',
            'error/404'               => __DIR__ . '/../views/error/404.phtml',
            'error/index'             => __DIR__ . '/../views/error/index.phtml',
        ),
    ),
);

//Zend\Debug\Debug::dump($config);

return $config;

AlwsController.php

Code:

<?php
namespace Alws;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class AlwsController extends AbstractActionController {

    public function __construct() {
    Zend\Debug\Debug::dump("DANS LE CONTROLLER !!!!");
    }

    public function indexAction() {
    Zend\Debug\Debug::dump("DANS L'ACTION DU CONTROLLER !!!!");
        return new ViewModel();
    }

    public function notFoundAction() {
        Zend\Debug\Debug::dump("ACTION NOT FOUND !!!!");
    }
}

Module.php

Code:

<?php
namespace alws;

use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;

class Module {

    public function onBootstrap(MvcEvent $e)
    {
        $eventManager        = $e->getApplication()->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);
    }

    public function getConfig() {
        return include __DIR__ . '/configs/module.config.php';
    }

    public function getAutoloaderConfig() {
        return array(
        /*
            'Zend\Loader\ClassMapAutoloader' => array(
                __DIR__ . '/autoload_classmap.php',
            ),*/
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }



}

Voilà cher collègue, je ne sais pas quoi vous poster d'autres... Ah si bien sûr le message d'erreur :

Fatal error: Class 'Alws\controllers\AlwsController' not found in var/www/ZF2/library/Zend/ServiceManager/AbstractPluginManager.php on line 170


En vous remerciant par avance. S'il manque des infos, il faut me le dire.

Hors ligne

 

#2 21-05-2013 15:28:15

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Problème de route : Class not found

Bonjour,

Renomme alws en Alws dans le dossier modules, d'autres part as tu bien activer ton module dans le fichier application.config.php

Dernière modification par alien7 (21-05-2013 15:30:33)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#3 21-05-2013 15:59:54

akrogames
Membre
Date d'inscription: 22-03-2010
Messages: 27

Re: Problème de route : Class not found

Coucou alien, merci de ta réponse :

J'ai bien activé dans mon application.config.php mon module. j'ai aussi renommé comme tu l'a demandé. Mais rien n'y fait toujours la même erreur. Comment je pourrais débugger ?

application.config.php :

Code:

<?php
return array(
    'modules' => array(
        'Alws',
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            'config/autoload/{,*.}{global,local}.php',
        ),
        'module_paths' => array(
            './modules'
        ),
    ),
);

Hors ligne

 

#4 21-05-2013 16:11:24

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Problème de route : Class not found

Renomme aussi controllers par Controllers, de même que models par Models mais je te conseillerai d'enlever les "s".

Le mieux est que tu commence avec le skeleton de zf2

Dernière modification par alien7 (21-05-2013 16:12:30)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#5 21-05-2013 16:14:13

akrogames
Membre
Date d'inscription: 22-03-2010
Messages: 27

Re: Problème de route : Class not found

Ah bah le but de mon test c'est justement d'éviter le skeleton zf2... Cela ne change rien normalement de mettre des majuscules ou pas avec ou sans S.

Hummm, comment je pourrais déboguer, je vais chercher de mon côté.

Hors ligne

 

#6 21-05-2013 16:15:49

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

Re: Problème de route : Class not found

Salut, en fait c'est ton arborescence qui n'est pas bonne. Je te suggère de la reprendre en t'aidant du skeletonApplication pour être conforme. Ensuite ton namespace n'est pas correct pour ton contrôleur. Encore une fois tu as les bon exemples sur le skeleton.

A vu d'oeil comme ça déjà le namespace de ton contrôleur (dans la classe contrôleur) doit être le suivant :
namespace Application\Controller;

Donc dans ton cas rajouter un S à la fin de contrôleur mais bon ça serait mieux que tu aies la même chose que le skeleton c'est plus simple pour t'aider comme est quasiment tous parti de là. Ensuite tu dois revoir en fonction du namespace la déclaration de ton contrôleur dans le fichier module.config.php.

En fait ce tableau permet de créer une entrée sous la clé Alws pour toi une référence vers la classe ayant pour namespace ce que tu lui a renseigné : Alws\controllers\AlwsController sauf que le namespace controllers n'existe pas puisque celui de ta classe AlwsController est seulement Alws\AlwsController.

Enfin pour retrouver tes classes en fonction du namespace il y a des conventions à respecter et même si remplaçais Alws\controllers\AlwsController par Alws\AlwsController dans ton fichier module.config.php ça ne fonctionnerait pas parce qu'il n'y a pas de corrélation entre ton arborescence de fichier et ton namespace.

akrogames a écrit:

Ah bah le but de mon test c'est justement d'éviter le skeleton zf2... Cela ne change rien normalement de mettre des majuscules ou pas avec ou sans S.
Hummm, comment je pourrais déboguer, je vais chercher de mon côté.

Si justement ça change suivant si t'es sur windows ou linux les comportements sont différents. Linux est case sensitive alors que windows ne l'est pas. Je vois pas en quoi utiliser le skeleton zf2 change quelque chose à ton test. Tu retires ce qui te convient pas mais tu as une arborescence de fichier propre et fonctionnel ce que tu n'as pas forcément toi lorsque tu le fais à la main. La preuve vis à vis du problème que tu rencontres le skeleton et bel et bien là pour te faire gagner du temps (même si pour une nouvelle application il y a un peu trop de chose mais quand on débute c'est toujours mieux d'utiliser ce qu'on met à disposition smile).

Hors ligne

 

#7 21-05-2013 16:35:01

akrogames
Membre
Date d'inscription: 22-03-2010
Messages: 27

Re: Problème de route : Class not found

Coucou orkin,

Ah voilà wink Cela fonctionne si on passe par la route par défaut. Par contre quand je souhaite accéder à http://al.local/alws/index il me dit Error 404 => The requested URL could not be matched by routing

En effet, je m'étais tromper dans le namespace. Je n'avais pas fait attention. Non mais le but de mon test c'est de faire joujou avec des arborescences exotiques et les routes. Et je n'utilise qu'un vrai système d'exploitation pour faire du ZF à savoir Linux, ^^.

C'est étrange que dans l'URL il fasse son caca nerveux là.

Hors ligne

 

#8 21-05-2013 16:43:02

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

Re: Problème de route : Class not found

C'est normal regarde la définition de tes routes. Tu as en route mère / et en route fille /controller/action donc dans ta route fille tu as 2 / soit http://al.local//alws/index

Hors ligne

 

#9 21-05-2013 16:58:21

akrogames
Membre
Date d'inscription: 22-03-2010
Messages: 27

Re: Problème de route : Class not found

Yep j'ai corrigé. J'avoue ne pas comprendre pourquoi il match pas Alws avec les controllers invokanbles. Tu as une idée ?

The requested controller could not be mapped to an existing controller class.

Controller:
    Alws\Alws(resolves to invalid controller class or alias: Alws\Alws)

Code:

                'may_terminate' => true,
                'child_routes' => array(
                    'default' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '[:controller[/:action]]',
                            'constraints' => array(
                                'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                            ),
                        ),
                    ),
                ),

Bon merci à vous deux en tout cas, c'est sympa de votre part.

Hors ligne

 

#10 21-05-2013 17:01:45

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

Re: Problème de route : Class not found

Parce que tu as une route fille qui est déjà dans le contrôleur Alws donc forcément lui il cherche le contrôleur Alws dans le contrôleur Alws donc forcément ça fonctionne pas. De plus le genre de route comme tu test est complètement à proscrire car très mauvais pour les performances wink

Hors ligne

 

#11 21-05-2013 17:06:14

akrogames
Membre
Date d'inscription: 22-03-2010
Messages: 27

Re: Problème de route : Class not found

Nah je suis d'accord que les routes comme je test, c'est la même chose qu'avec ZF 1 et que c'est très mauvais, mais cela se passe comment en ZF 2 alors ?

J'ai essayé avec :
http://al.local/alws/alws/index
http://al.local/alws/index
http://al.local/index

Rien n'y fait, j'ai du me tromper dans ma définition.

Dernière modification par akrogames (21-05-2013 17:06:46)

Hors ligne

 

#12 21-05-2013 17:12:45

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

Re: Problème de route : Class not found

Oui c'est normal que ça ne fonctionne pas. Dans ZF2 le mieux c'est de déclarer chacune des routes et minimiser la section dynamique pour les paramètres.

Là il suffit juste de retirer :controller et ça devrait fonctionner pour http://al.local/alws/index

Ta définition est valable pour une route mère pas une route fille sauf dans le cas ou la route mère ne fait pas référence à un contrôleur.

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