| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="learning.autoloading.resources">
- <title>Auto-chargement de resources</title>
- <para>
- En développant des applications, il est souvent difficile de regrouper certaines classes
- dans une relation 1:1 avec le système de fichiers que recommande le Zend framework, ou
- alors
- ça ne semble pas intuitif de le faire. Cela signifie que les classes ne seront pas
- trouvées
- par l'autoloader.
- </para>
- <para>
- Si vous lisez <link linkend="learning.autoloading.design">les caractéristiques de
- l'architecture
- </link>
- de l'autoloader, le dernier point de cette section indique qu'une solution existe pour
- un tel problème. Zend Framework utilise alors <classname>Zend_Loader_Autoloader_Resource
- </classname>
- .
- </para>
- <para>
- Une ressource est juste un nom qui correspond à un espace de noms pour un composant
- (qui est ajouté à l'espace de noms de l'autoloader) et un chemin (qui est relatif au
- chemin de base de l'autoloader). Sous forme de code, vous feriez quelque chose comme:
- </para>
- <programlisting language="php"><![CDATA[
- $loader = new Zend_Application_Module_Autoloader(array(
- 'namespace' => 'Blog',
- 'basePath' => APPLICATION_PATH . '/modules/blog',
- ));
- ]]></programlisting>
- <para>
- Une fois le chargeur en place, il faut l'informer des différents types de ressources
- qu'il va avoir à gérer. Ces types sont simplement des paires d'arbres et de préfixes.
- </para>
- <para>
- Considérons ce qui suit comme exemple:
- </para>
- <programlisting language="text"><![CDATA[
- path/to/some/resources/
- |-- forms/
- | `-- Guestbook.php // Foo_Form_Guestbook
- |-- models/
- | |-- DbTable/
- | | `-- Guestbook.php // Foo_Model_DbTable_Guestbook
- | |-- Guestbook.php // Foo_Model_Guestbook
- | `-- GuestbookMapper.php // Foo_Model_GuestbookMapper
- ]]></programlisting>
- <para>
- Le premier reflexe est de créer un chargeur de ressources:
- </para>
- <programlisting language="php"><![CDATA[
- $loader = new Zend_Loader_Autoloader_Resource(array(
- 'basePath' => 'path/to/some/resources/',
- 'namespace' => 'Foo',
- ));
- ]]></programlisting>
- <para>
- Puis, nous définissons des types de ressources.
- <methodname>Zend_Loader_Autoloader_Resourse::addResourceType()</methodname> prend trois
- arguments: le "type" de resource (une chaine arbitraire), le chemin sous le chemin de base
- dans lequel le type de ressource doit se trouver, et le préfixe particulier à utiliser
- pour
- ce type de ressource. Dans l'arbre représenté ci-dessus, il y a trois types : form
- (dans le sous-dossier "forms", avec un préfixe "Form"), model (dans le sous-dossier
- "models",
- avec un préfixe "Model"), et dbtable (dans le sous-dossier
- "<filename>models/DbTable</filename>", avec un préfixe "<classname>Model_DbTable</classname>").
- Nous les définirons comme ceci:
- </para>
- <programlisting language="php"><![CDATA[
- $loader->addResourceType('form', 'forms', 'Form')
- ->addResourceType('model', 'models', 'Model')
- ->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
- ]]></programlisting>
- <para>
- Il ne reste plus qu'à utiliser les classes:
- </para>
- <programlisting language="php"><![CDATA[
- $form = new Foo_Form_Guestbook();
- $guestbook = new Foo_Model_Guestbook();
- ]]></programlisting>
- <note>
- <title>Autoload de ressource Module</title>
- <para>
- La couche <acronym>MVC</acronym> de Zend Framework encourage l'utilisation de
- "modules", qui sont des mini-applications de votre site. Les modules
- possèdent typiquement des
- types de ressource par défaut, et Zend Framework
- <link linkend="project-structure.filesystem">recommande une hiérarchie de répertoires
- standard pour les modules
- </link>
- .Les autoloaders de ressources sont particulièrement
- adaptés à cette situation -- tellement qu'ils sont activés par défaut lorsque vous
- créez
- des classes de bootstrap qui étendent
- <classname>Zend_Application_Module_Bootstrap</classname>. Pour plus d'informations,
- lisez
- la <link
- linkend="zend.loader.autoloader-resource.module">documentation
- de
- Zend_Loader_Autoloader_Module
- </link>
- .
- </para>
- </note>
- </sect1>
|