<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://mirmodynamics.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Mirmo Dynamics - Tag - ini</title>
  <link>http://mirmodynamics.com/</link>
  <atom:link href="http://mirmodynamics.com/feed/tag/ini/rss2" rel="self" type="application/rss+xml"/>
  <description>Rien de grand ne se fit jamais sans enthousiasme.</description>
  <language>en</language>
  <pubDate>Wed, 03 Dec 2008 17:01:33 +0100</pubDate>
  <copyright>2003-2008 &amp;copy; Geoffrey Bachelet</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Howto: Utiliser Zend_Controller_RewriteRouter avec Zend_Config</title>
    <link>http://mirmodynamics.com/post/2006/10/31/Howto%3A-Utiliser-Zend_Controller_RewriteRouter-avec-Zend_Config</link>
    <guid isPermaLink="false">urn:md5:58ec785aef55507ca8784ce7b8d798b3</guid>
    <pubDate>Tue, 31 Oct 2006 20:26:00 +0100</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Coding</category>
        <category>bootstrap</category><category>configuration</category><category>controlleurs</category><category>doc</category><category>howto</category><category>ini</category><category>MVC</category><category>php</category><category>zend framework</category>    
    <description>&lt;p&gt;Comme je le disais plus bas, le Zend Framework Preview 0.2.0 est dans les bacs ! Cette nouvelle mouture apporte son lot de nouveautés, et nous allons nous pencher sur une des plus interressantes: le &lt;em&gt;RewriteRouter&lt;/em&gt;. Le &lt;em&gt;RewriteRouter&lt;/em&gt; est un routeur pour le composant &lt;acronym&gt;MVC&lt;/acronym&gt; du Zend Framework qui va nous permettre de configurer nos &lt;acronym&gt;URL&lt;/acronym&gt; comme dans Ruby on Rails, c'est à dire (en gros), via un fichier de configuration, et c'est là que &lt;em&gt;Zend_Config&lt;/em&gt; entre en jeu.&lt;/p&gt;    &lt;h3&gt;Mettre en place le routeur&lt;/h3&gt;


&lt;p&gt;C'est bien beau tout ça, mais pour l'utiliser, il faut déjà en informer le controlleur. Pour cela, rien de plus simple, on utilise la méthode &lt;code&gt;addRouter&lt;/code&gt;:&lt;/p&gt;


&lt;pre&gt;$router = new Zend_Controller_RewriteRouter;
$controller = Zend_Controller_Front::getInstance();
$controller-&amp;gt;setRouter($router);&lt;/pre&gt;


&lt;p&gt;Le &lt;em&gt;RewriteRouter&lt;/em&gt; est pré-configuré avec deux routes qui permettent d'assurer la compatibilité descendante avec l'ancien routeur, donc jusque là, tout va bien.&lt;/p&gt;


&lt;h3&gt;Déclarer les routes&lt;/h3&gt;


&lt;p&gt;Nous utiliserons un fichier de configuration dédié aux routes, que nous appellerons sobrement &lt;em&gt;routes.ini&lt;/em&gt;, et que nous placerons dans &lt;code&gt;app/&lt;/code&gt;, à coté de son compagnon &lt;em&gt;config.ini&lt;/em&gt;. Ce fichier de configuration contiendra une unique section &lt;code&gt;[routes]&lt;/code&gt;, qui contiendra à son tour les multiples définitions de routes que nous souhaitons y caser. Une route se compose de 5 éléments principaux:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;L'identifiant de la route. C'est un identifiant interne utilisé par le &lt;code&gt;RewriteRouter&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;l'&lt;acronym&gt;URL&lt;/acronym&gt; de la route, c'est ce qui permet au routeur de reconnaitre la route à utiliser,&lt;/li&gt;
&lt;li&gt;les valeurs par défauts des variables,&lt;/li&gt;
&lt;li&gt;les requirements de la route, qui permettent de déterminer si une route est bien formée ou non.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sans plus attendre, un petit exemple: la route qui &lt;em&gt;pourrait&lt;/em&gt; permettre d'accéder à un billet dans dotclear 2:&lt;/p&gt;


&lt;pre&gt;post.route = post/:year/:month/:day/:title
post.reqs.year = &amp;quot;\d+&amp;quot;
post.reqs.month = &amp;quot;\d+&amp;quot;
post.reqs.day = &amp;quot;\d+&amp;quot;
post.reqs.title = &amp;quot;[a-zA-Z0-9_:-]&amp;quot;+
post.defaults.controller = post
post.defaults.action = view
post.defaults.title =&lt;/pre&gt;


&lt;p&gt;Elle &lt;em&gt;pourrait&lt;/em&gt; seulement, car en fait, la regexp du &lt;code&gt;title&lt;/code&gt; est trop restrictive (une &lt;acronym&gt;URL&lt;/acronym&gt; peut contenir d'autres caractères que ceux là), et de plus, les &lt;acronym&gt;URL&lt;/acronym&gt; stockées par dotclear 2 en base de données comprennent tout ce qui se trouve après &lt;code&gt;post/&lt;/code&gt; (par exemple le champs &lt;code&gt;post_url&lt;/code&gt; de ce billet contient: &lt;code&gt;2006/10/31/Howto:-Utiliser-Zend_Controller_RewriteRouter-avec-Zend_Config&lt;/code&gt;).&lt;/p&gt;


&lt;p&gt;Cela étant dit, la route que nous venons de décrire s'appliquera aux &lt;acronym&gt;URL&lt;/acronym&gt;s suivantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/post/2006/30/10/ZendFramework&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/post/42/2006/56/Foobar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/post/2006/30/10/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mais pas à:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/post/2006/Foobar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/post/Foobar/2006/30/01&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On note donc d'ores et déjà:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;que la validation des composants d'une route se fait par expression régulière&lt;/li&gt;
&lt;li&gt;qu'on peut ommettre le dernier composant d'une route si il possède une valeur par défaut (récursivement)&lt;/li&gt;
&lt;li&gt;qu'on ne peut pas modifier l'ordre des composants d'une route&lt;/li&gt;
&lt;li&gt;qu'on doit spécifier manuellement le nom du controlleur et de l'action à utiliser&lt;/li&gt;
&lt;li&gt;et c'est déjà pas mal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Décortiquons maintenant une &lt;acronym&gt;URL&lt;/acronym&gt;: &lt;code&gt;/post/2006/30/10/ZendFramework&lt;/code&gt;. Le routeur va diviser cette &lt;acronym&gt;URL&lt;/acronym&gt; ainsi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Controller: &lt;code&gt;post&lt;/code&gt; (d'après les &lt;em&gt;defaults&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Action: &lt;code&gt;view&lt;/code&gt; (d'après les &lt;em&gt;defaults&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Paramètres: &lt;code&gt;year&lt;/code&gt;: 2006, &lt;code&gt;month&lt;/code&gt;: 30, &lt;code&gt;day&lt;/code&gt;: 10, &lt;code&gt;title&lt;/code&gt;: ZendFramework (d'après l'&lt;acronym&gt;URL&lt;/acronym&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les paramètres ainsi détectés seront disponibles via la méthode &lt;code&gt;$this-&amp;gt;_getParam($name);&lt;/code&gt; a l'intérieur du controlleur.&lt;/p&gt;


&lt;p&gt;Dernier point de ce chapitre, une déclaration de route peut comporter deux variables spéciales: &lt;code&gt;:controller&lt;/code&gt; et &lt;code&gt;:action&lt;/code&gt;, qui servent respectivement à détecter le controller et l'action à utiliser dans l'url. Par exemple, la route &lt;em&gt;builtin&lt;/em&gt; &lt;code&gt;compat&lt;/code&gt; chargé d'assurer la compatibilité descendante se déclare ainsi:&lt;/p&gt;


&lt;pre&gt;compat.route = :controller/:action
compat.defaults.controller = index
compat.defaults.action = index&lt;/pre&gt;


&lt;h3&gt;Assembler le tout&lt;/h3&gt;


&lt;p&gt;Dernière étape, transférer directement toutes ces déclarations dans le Routeur: n'y allons pas par quatre chemin:&lt;/p&gt;


&lt;pre&gt;$router-&amp;gt;addConfig(new Zend_Config_Ini('/path/to/routes.ini', null), 'routes');&lt;/pre&gt;


&lt;p&gt;C'est aussi simple que ça. Ce qui nous donne, en prenant en compte le morceau de code du début de l'article:&lt;/p&gt;


&lt;pre&gt;$router = new Zend_Controller_RewriteRouter;
$router-&amp;gt;addConfig(new Zend_Config_Ini($routes_path, null), 'routes');
$controller = Zend_Controller_Front::getInstance();
$controller-&amp;gt;setRouter($router);&lt;/pre&gt;


&lt;p&gt;And voilà. Je ne saurais que vous conseiller la lecture du &lt;a href=&quot;http://framework.zend.com/manual/en/zend.controller.rewriterouter.html&quot;&gt;manuel&lt;/a&gt; pour plus d'informations (sachant qu'en fait, &lt;code&gt;addRoute&lt;/code&gt; attend en deuxième argument une instance de &lt;code&gt;Zend_Controller_Router_Route&lt;/code&gt;, mais qui s'instancie avec les paramètres qu'ils passent à &lt;code&gt;addRoute&lt;/code&gt;, petite coquille du manuel :p).&lt;/p&gt;</description>
    
    
    
          <comments>http://mirmodynamics.com/post/2006/10/31/Howto%3A-Utiliser-Zend_Controller_RewriteRouter-avec-Zend_Config#comment-form</comments>
      <wfw:comment>http://mirmodynamics.com/post/2006/10/31/Howto%3A-Utiliser-Zend_Controller_RewriteRouter-avec-Zend_Config#comment-form</wfw:comment>
      <wfw:commentRss>http://mirmodynamics.com/feed/atom/comments/710</wfw:commentRss>
      </item>
    
  <item>
    <title>Gestion de la configuration: Zend_Config</title>
    <link>http://mirmodynamics.com/post/2006/08/30/Gestion-de-la-configuration%3A-Zend_Config</link>
    <guid isPermaLink="false">urn:md5:99872ef7ee75ca14d379b3a9d56bbd7d</guid>
    <pubDate>Mon, 04 Sep 2006 22:57:00 +0200</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Coding</category>
        <category>configuration</category><category>ini</category><category>zend framework</category>    
    <description>    &lt;p&gt;Il existe au bas mot autant de manières de gérer la configuration d'une application qu'il y a de développeurs: fichier &lt;acronym&gt;INI&lt;/acronym&gt;, variables, constantes, fichier &lt;acronym&gt;XML&lt;/acronym&gt;, etc. Le composant &lt;code&gt;Zend_Config&lt;/code&gt; développé par &lt;a href=&quot;http://www.akrabat.com/&quot;&gt;Rob Allen&lt;/a&gt; propose une approche simple et élégante basée sur un fichier &lt;acronym&gt;INI&lt;/acronym&gt; qui permet de mettre en place aisément plusieurs environnements de configuration. Commençons par rappeler qu'un fichier &lt;code&gt;INI&lt;/code&gt; s'écrit le plus simplement du monde en associant un nom de variable (composante gauche) à une valeur (composante droite) en leur interposant un signe d'égalité:&lt;/p&gt;


&lt;pre&gt;name = value&lt;/pre&gt;


&lt;p&gt;On peut également y ajouter des sections, qui permettent de structurer le fichier:&lt;/p&gt;


&lt;code class=&quot;database&quot;&gt;hostname = localhost&lt;br /&gt;
username = unprivilegieduser&lt;br /&gt;
password = someobscurepassword&lt;br /&gt;
database = mydatabase&lt;/code&gt;


&lt;p&gt;Venons en au vif du sujet, l'utilisation proprement dite du sus-cité composant. N'y allons pas par quatre chemins, balançons directement un petit bout de code:&lt;/p&gt;


&lt;pre&gt;Zend::loadClass('Zend_Config');
Zend::loadClass('Zend_Config_Ini');

$config = new Zend_Config(Zend_Config_Ini::load('mon/fichier/ini', 'section'));&lt;/pre&gt;


&lt;p&gt;Rien de bien compliqué, on indique a &lt;code&gt;Zend_Config_Ini&lt;/code&gt; un fichier &lt;acronym&gt;INI&lt;/acronym&gt; à charger, et plus précisément quelle section de ce fichier nous interresse, puis il transmet les informations &lt;em&gt;qui vont bien&lt;/em&gt; à &lt;code&gt;Zend_Config&lt;/code&gt;, qui s'occupe de nous créer un bel objet de configuration.  L'objet &lt;code&gt;$config&lt;/code&gt; contient dès lors les valeurs du fichier &lt;acronym&gt;INI&lt;/acronym&gt; comme autant de variables membres. Par exemple, si on utilise le fichier &lt;acronym&gt;INI&lt;/acronym&gt; détaillé plus haut, on pourrait faire:&lt;/p&gt;


&lt;pre&gt;echo $config-&amp;gt;username;&lt;/pre&gt;


&lt;p&gt;Ce qui afficherai &lt;code&gt;unprivilegieduser&lt;/code&gt;. Simple non ? Simple, mais ne nous leurrons pas, ce n'est pas là l'usage que l'on fera de ce composant. En effet, quoi de plus rébarbatif que de devoir charger chaque section d'un fichier &lt;acronym&gt;INI&lt;/acronym&gt; ? La vraie puissance de ce système réside dans le fait qu'il permet d'avoir des &lt;em&gt;environnement de configuration&lt;/em&gt; séparés. Remanions légèrement notre fichier de configuration:&lt;/p&gt;


&lt;pre&gt;; Developement environement configuration
[dev]
db.hostname = localhost
db.username = unprivilegieduser
db.password = someobscurepassword
db.database = mydatabase

; Production configuration
[prod]
db.hostname = db.monsite.fr
db.username = someobscureuser
db.password = somereallyobscurepassword
db.database = mydatabase&lt;/pre&gt;


&lt;p&gt;Comme &lt;code&gt;Zend_Config_Ini&lt;/code&gt; fait bien les choses, il analysera chaque nom de variable pour créer une arborescence d'objets en utilisant le &lt;code&gt;.&lt;/code&gt; (point) comme séparateur. On aura ainsi:&lt;/p&gt;


&lt;pre&gt;$config = new Zend_Config(Zend_Config_Ini::load('./example.ini', 'dev'));
echo $config-&amp;gt;db-&amp;gt;username;&lt;/pre&gt;


&lt;p&gt;Il ne reste plus qu'a déterminer une manière de savoir quand on se trouve dans l'environnement de production ou dans celui de développement, il existe quelques méthodes pour cela:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;un fichier &lt;code&gt;.htaccess&lt;/code&gt; avec une directive &lt;code&gt;SetEnv DEV 1&lt;/code&gt;, qui donnera la variable &lt;code&gt;$_ENV['DEV']&lt;/code&gt; dans le script&lt;/li&gt;
&lt;li&gt;un test sur l'&lt;acronym&gt;IP&lt;/acronym&gt; du serveur (&lt;acronym&gt;IP&lt;/acronym&gt; locale, serveur de développement, &lt;acronym&gt;IP&lt;/acronym&gt; publique pour le serveur de production)&lt;/li&gt;
&lt;li&gt;un test sur la variable &lt;code&gt;$_SERVER['HTTP_HOST']&lt;/code&gt; (&lt;code&gt;dev.monsite.fr&lt;/code&gt;, etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A titre personnel, j'utilise la solution du &lt;code&gt;.htaccess&lt;/code&gt;, qui peut s'implémenter comme ça:&lt;/p&gt;


&lt;pre&gt;$section = isset($_ENV['DEV']) ? 'dev' : 'prod';
$config = new Zend_Config(Zend_Config_Ini::load('./example.ini', $section));&lt;/pre&gt;


&lt;p&gt;On peut bien entendu enregistrer notre instance de &lt;code&gt;$config&lt;/code&gt; dans le &lt;code&gt;Zend_Registry&lt;/code&gt;:&lt;/p&gt;


&lt;pre&gt;Zend::register('config', $config);&lt;/pre&gt;


&lt;p&gt;Ce qui nous permettra d'y avoir accès en toute simplicité par la suite:&lt;/p&gt;


&lt;pre&gt;$config = Zend::registry('config');&lt;/pre&gt;


&lt;p&gt;(Commentaires et Trackbacks sur &lt;a href=&quot;http://phpmafia.net/zend/post/2006/09/04/Gestion-de-la-configuration&quot;&gt;PHP Mafia&lt;/a&gt;)&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>