Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-10-2008 17:37:24

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

[résolu] Le fichier d'amorçage, le bootstrap

Décidément, je vous ennui toutes les deux minutes...

Après avoir lu différents tutoriels, j'ai trouvé différentes façons de concevoir ce fichier et je n'en comprends pas les subtilités. Je ne veux pas me lancer dans un copier/coller tout bête sans rien comprendre, surtout au démarrage.

Voici le fichier d'amorçage typique que j'ai trouvé :

Code:

# PARTIE 1
set_include_path('.'
    . PATH_SEPARATOR . '../library/Zend/'
    . PATH_SEPARATOR  . '../application/models/'
    . PATH_SEPARATOR . get_include_path()
);


#PARTIE 2
require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();

#PARTIE 3
Zend_Loader::loadClass('Zend_Controller_Front');

// obtenir une instance du contrôleur 
$frontController = Zend_Controller_Front::getInstance();

// la configurer
$frontController->setControllerDirectory('./application/controllers');

// en phase de développement, le client voit le retour des erreurs
// (cette information devrait être placée dans un fichier de configuration)
$frontController->throwExceptions(true);

// démarrage
$frontController->dispatch();

PARTIE 1 (le set_include_path)

Cette fonction PHP définit où chercher les composants du framework lors d'éventuelles appels aux fonctions. Il est important de placer l'inclusion de la bibliothèque Zend au début du fichier pour optimiser les ressources.

Je suppose que le PATH_SEPARATOR sépare les différents chemins de la fonction et que le get_include_path les intègre à PHP.

L'inclusion du répertoire models permet de savoir où chercher les models à charger.

PARTIE 2 (Zend_Loader)

http://framework.zend.com/manual/fr/zend.loader.html

Zend_Loader si j'ai bien compris c'est une classe qui sert à charger d'autres classes. Quelle est la différence avec un require_once, c'est juste un peu plus évolué !?
Zend_Loader::registerAutoload() - A quoi sert cette méthode  ?

PARTIE 3 (Le front controller)

http://framework.zend.com/manual/fr/zen … oller.html

On charge la class Zend_Front_Controller puis on instancie le front controller. C'est lui qui reçoit toutes les demandes.
Le contrôleur frontal est chargé d'exécuter l'action. C'est bien ça?

Dernière modification par miboo (07-11-2008 11:29:30)


aka miboo

Hors ligne

 

#2 17-10-2008 18:11:37

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [résolu] Le fichier d'amorçage, le bootstrap

Salut,

Zend_Loader si j'ai bien compris c'est une classe qui sert à charger d'autres classes. Quelle est la différence avec un require_once !?
Zend_Loader::registerAutoload() - A quoi sert cette méthode  ?

La différence avec require_once c'est que Zend_Loader gère les conventions de nommage et de chemins mis en place par le Framework et le modèle MVC.

Par exemple, si tu as comme include_path :

Code:

set_include_path('.'
    . PATH_SEPARATOR . get_include_path()
    . PATH_SEPARATOR . '../library/'    
);

En rappelant au passage que si le chemin du framework est configuré dans le php.ini, il faut placer le get_include_path() en premier car le Loader va parcourir les chemins dans le même ordre que le set_include_path.

Revenons à nos moutons.
Si tu as un dossier 'library' (au même niveau que 'application' dans l'arbo, donc commun à tout le projet) et que tu le structures ainsi :

Code:

library/
    MyLib/
        Auth/
            Adapter/
                Webservice.php
        Filter/
            Date.php
            Encoding.php
        Plugin/
            Rout.php
        Validate/
                EmailAddress.php
        etc...

etc... c'est un exemple.

Et que tu fais un :

Code:

Zend_Loader::loadClass('MyLib_Filter_Date');

ou encore :

Code:

Zend_Loader::loadClass('MyLib_Auth_Adapter_Webservice');

Il parcourra automatiquement les dossiers pour trouver la bonne classe. Par convention, Zend considère que le underscore '_' représente un noeud dans l'arborescence.

Tu peux redéfinir ces règles. Personnellement j'aime beaucoup les conventions mises en place par Zend et j'essaie de les respecter un maximum.

L'exemple que je te donne est similaire à ma façon de procéder.

Après comme le dit très bien la doc :

Zend_Loader contre require_once()

Les méthodes Zend_Loader sont les meilleures à utiliser si le nom de fichier que vous devez charger est variable. Par exemple, s'il est basé sur un paramètre de la saisie de l'utilisateur ou un argument de méthode. Si vous chargez un fichier ou une classe dont le nom est constant, il n'y a aucun avantage à l'utilisation de Zend_Loader sur l'utilisation de fonctions de PHP traditionnelles comme require_once().

Pour

Code:

Zend_Loader::registerAutoload();

D'un avis personnel, je ne te conseille pas de l'utiliser, tout d'abord pour des raisons de performances, et puis surtout je trouve que le code est plus difficile à comprendre et à maintenir.

C'est toujours bien de voir d'un coup d'oeil quelles sont les classes utilisées.


On charge la class Zend_Front_Controller puis on instancie le front controller. C'est lui qui reçoit toutes les demandes.
Le contrôleur frontal est chargé d'exécuter l'action. C'est bien ça?

Le frontcontroller va intercepter (grâce aussi aux règles de ré-écritures qui renvoient tout, sauf les ressources, vers le bootstrap), les requêtes du client et définir une route module/controller/action à suivre.

Ces règles sont facilement maitrisable à l'aide de plugins, avec lesquels tu peux intervenir à tous les niveaux du routage.


N'hésite pas si tu as d'autres questions.

A+ benjamin.

Dernière modification par Delprog (17-10-2008 18:15:14)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#3 18-10-2008 15:12:39

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [résolu] Le fichier d'amorçage, le bootstrap

Merci Delprog pour cette explication, claire, détaillée et exhaustive...
Il va falloir que je pense à parler de l'autoload et de notions de performances dans la FAQ.

Hors ligne

 

#4 18-10-2008 23:18:33

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu] Le fichier d'amorçage, le bootstrap

Merci pour ta réponse, c'est déjà plus clair maintenant smile

J'ai bien compris le début, mais pourrais-tu me détailler la partie 3 et les lignes ci-dessous ?

// On charge la classe Zend_Controller_Front ?
Zend_Loader::loadClass('Zend_Controller_Front');

// On charge dans la variable $frontController une instance du front controller
$frontController = Zend_Controller_Front::getInstance();

// On configure notre instance en indiquant où est ce que se trouve les controller d'actions (?)
$frontController->setControllerDirectory('./application/controllers');

// En phase de développement uniquement, on affiche les éventuelles erreurs
$frontController->throwExceptions(true);

// On démarre le processus de traitement de requête
$frontController->dispatch();



J'ai également entendu parler de Zend_Controller_Router_Rewrite, le routeur par défaut charger de récupérer une URL et de la décomposer en contrôleur, action, et paramètres.
Exemple de la documentation :

Par exemple, l'URL http://localhost/foo/bar/key/value serait décodée pour employer le contrôleur foo, l'action bar, et pour indiquer un paramètre key avec une valeur value.

Ce routeur n'apparaît pas dans mon bootstrap, est-il obligatoire, est-il nécessaire sachant que j'ai déjà un fichier .htaccess ?

Le front controller (index.php) est le script chargé de recevoir toutes les requêtes, de préparer l'application à l'aide de différents paramètres de configuration. Il utilise différents controleurs d'actions, à quoi servent-ils ?

Dernière modification par miboo (18-10-2008 23:19:16)


aka miboo

Hors ligne

 

#5 18-10-2008 23:20:14

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu] Le fichier d'amorçage, le bootstrap

J'ai oublié une petite chose, à quoi sert l'autoreload du Zend_Load ?

Merci

Dernière modification par miboo (19-10-2008 00:01:51)


aka miboo

Hors ligne

 

#6 19-10-2008 00:51:52

gauthier
Membre
Date d'inscription: 30-09-2008
Messages: 116
Site web

Re: [résolu] Le fichier d'amorçage, le bootstrap

Salut miboo,

je suis trop crevé pour revenir sur toutes tes questions mais je vais au moins répondre à la dernière wink

Zend_Loader::registerAutoload() va faire que Zend_Loader::loadClass() sera appelée automatiquement chaque fois que tu feras un new Truc(); alors que la définition de la classe Truc n'a pas été chargée.

La différence avec require_once c'est que 1) elle est déclenchée automatiquement, donc pas besoin de faire des require_once à tout bout de champ 2) elle va convertir toute seule les noms de classes en chemins. Exemple :

Code:

Zend_Loader::registerAutoload();
$front = new Zend_Controller_Front();
// la ligne précédente va déclencher :
//    Zend_Loader::loadClass('Zend_Controller_Front');
// qui va exécuter, après quelques tests :
//    require_once('Zend/Controller/Front.php');

C'est beaucoup plus simple pour toi au final smile Même s'il est vrai que l'autoload va causer une lergère augmentation de la charge et donc une réduction proportionnelle des performances.


Consultant Zend Technologies // Blog perso : Logiciel libre et développement web -- http://freeblogware.org

Hors ligne

 

#7 23-10-2008 09:54:53

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu] Le fichier d'amorçage, le bootstrap

Merci beaucoup pour tes explications, c'est très clair maintenant smile


aka miboo

Hors ligne

 

#8 23-10-2008 09:55:55

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [résolu] Le fichier d'amorçage, le bootstrap

miboo a écrit:

Merci pour ta réponse, c'est déjà plus clair maintenant smile

J'ai bien compris le début, mais pourrais-tu me détailler la partie 3 et les lignes ci-dessous ?

// On charge la classe Zend_Controller_Front ?
Zend_Loader::loadClass('Zend_Controller_Front');

// On charge dans la variable $frontController une instance du front controller
$frontController = Zend_Controller_Front::getInstance();

// On configure notre instance en indiquant où est ce que se trouve les controller d'actions (?)
$frontController->setControllerDirectory('./application/controllers');

// En phase de développement uniquement, on affiche les éventuelles erreurs
$frontController->throwExceptions(true);

// On démarre le processus de traitement de requête
$frontController->dispatch();



J'ai également entendu parler de Zend_Controller_Router_Rewrite, le routeur par défaut charger de récupérer une URL et de la décomposer en contrôleur, action, et paramètres.
Exemple de la documentation :

Par exemple, l'URL http://localhost/foo/bar/key/value serait décodée pour employer le contrôleur foo, l'action bar, et pour indiquer un paramètre key avec une valeur value.

Ce routeur n'apparaît pas dans mon bootstrap, est-il obligatoire, est-il nécessaire sachant que j'ai déjà un fichier .htaccess ?

Le front controller (index.php) est le script chargé de recevoir toutes les requêtes, de préparer l'application à l'aide de différents paramètres de configuration. Il utilise différents controleurs d'actions, à quoi servent-ils ?

UP - Si quelqu'un a un peu de courage/temps , merci smile

Edit 7/11 - Merci à tous pour vos réponses

Dernière modification par miboo (07-11-2008 11:30:16)


aka miboo

Hors ligne

 

#9 25-10-2008 10:56:57

mdelanno
Membre
Lieu: Nord
Date d'inscription: 26-08-2007
Messages: 90
Site web

Re: [résolu] Le fichier d'amorçage, le bootstrap

miboo a écrit:

On charge la class Zend_Front_Controller puis on instancie le front controller. C'est lui qui reçoit toutes les demandes.
Le contrôleur frontal est chargé d'exécuter l'action. C'est bien ça?

Le contrôleur frontal est en quelque sorte le chef d'orchestre. Il utilise le routeur pour déterminer le contrôleur d'action et l'action à exécuter à partir de l'url et des paramètres fournis avec la requête.
Il gère également les plugins, qui permettent la gestion des vues et des erreurs.

Tu n'as pas besoin de charger le routeur, c'est le contrôleur frontal qui s'en charge.

Dernière modification par mdelanno (25-10-2008 10:57:34)

Hors ligne

 

#10 25-10-2008 14:33:16

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [résolu] Le fichier d'amorçage, le bootstrap

Si tu utilises Zend Studio for Eclipse V6.1.0, il te génère une arborescence complète d'un projet de type Zend Framework avec tout ce qu'il faut dedans et un découpage des procédures par méthodes particulièrement propre dans le quel index.php ne contient qu'un simple appel au bootstrap.php qui lui même utilise initializer.php.

ça ne change rien à la justesse des explications précédentes.

Dernière modification par Jean-Marc Rigade (25-10-2008 14:33:44)

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