Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-08-2013 03:30:44

omega2
Membre
Lieu: Boisbriand, quebec, canada
Date d'inscription: 01-04-2009
Messages: 85
Site web

autoload pour \Zend mais classes à mettre dans des fichiers de config?

Bonjour,
Je suis entrain de faire la transition de mon site depuis le zend framework 1 vers le zend framework 2 et il y a quelque chose que je ne comprend vraiment pas avec le système d'autoload du zf2.

Dans le site de base de zf2 l'index.php fait appel au fichier "init_autoloader.php".
Ce fichier appelle le fichier "vendor/autoload.php".
Celui ci fait appel au fichier "autoload_real.php" qui contient une classe.
Cette classe utilise \Composer\Autoload\ClassLoader qui va enregistrer une méthode d'autoloading avec spl_autoload_register. Cette classe utilise un fichier de config pour faire la liaison entre un namespace et un répertoire.

Jusque là, j'arrive à comprend la mécanique. Là où je suis complètement perdu c'est quand je me retrouve avec l'erreur '%s was unable to fetch or create an instance for %s' du fichier ServiceManager.php quand je fait un $sm->get() pour une classe du zf2.
En rajoutant du débug, j'ai l'impression que la méthode de la classe ClassLoader n'est pas appelé quand cette erreur arrive.
Si c'était le cas pour toutes les classes, je comprendrais mais ça n'a l'air de le faire que pour certaines.

J'en arrive donc à mes questions actuelles :
1) Est-ce que ça vous semble normal ou est ce que j'ai bousillé quelque chose sans m'en rendre compte?
2) Pourquoi est ce qu'il faut que certaines classes du framework soient indiqué spécifiquement dans des fichiers de config (Zend\Db\Adapter\Adapter dans "/config/autoload/global.php" par exemple) pour que la classe \Zend\ServiceManager\ServiceManager arrive à la charger.
3) Comment est-ce que je peux savoir quelles classes je vais devoir rajouter dans les fichiers de config pour que mon site fonctionne même dans le cas ou il y a une erreur (par exemple, une requête sql rejeté par mysql) ?

PS : Le fichier qui contient le \Adapter\Adapter :

Code:

<?php
/**
 * Global Configuration Override
 *
 * You can use this file for overriding configuration values from modules, etc.
 * You would place values in here that are agnostic to the environment and not
 * sensitive to security.
 *
 * @NOTE: In practice, this file will typically be INCLUDED in your source
 * control, so do not include passwords or other sensitive information in this
 * file.
 */

return array(
    // ...
    'db' => array(
        'driver'         => 'Pdo',
        'dsn'            => 'mysql:dbname=test;host=localhost',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
    ),
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter'
                    => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
);
;

Hors ligne

 

#2 14-08-2013 09:38:03

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

Re: autoload pour \Zend mais classes à mettre dans des fichiers de config?

Salut en fait tu fais un mélange entre 2 choses :

- Le chargement des fichiers qui se fait de plusieurs manières, soit via un fichier d'autoload comme tu le mentionnes qui va grosso modo faire un mapping entre un namespace et le répertoire du fichier sur le disque, soit en interprétant le namespace pour retrouver le répertoire. La première est simplement plus rapide car pas de "recherche".
- La configuration des services comme le service manager. Tu vas lui définir un mapping entre un nom de service (généralement on utilise le FQCN pour plus de lisibilité) vers une classe ceci dans le but que le service manager te retourne une instance de cette classe. Donc pour pouvoir récupérer une instance d'une classe via le service manager il faut le mettre dans le fichier de configuration du module : module.config.php ainsi quand tu vas faire $this->getServiceLocator()->get('Mon\Nom\De\Mapping') ça va te retourner une instance de la classe associée à ce mapping.

Voila smile

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