{"id":60,"date":"2007-08-03T00:30:00","date_gmt":"2007-08-03T00:30:00","guid":{"rendered":"http:\/\/grummfy.be\/blog\/?p=60"},"modified":"2009-12-31T03:16:19","modified_gmt":"2009-12-31T01:16:19","slug":"zend-framework-zf-un-livre-dor-troisieme-etapes-bases-des-fichiers","status":"publish","type":"post","link":"https:\/\/grummfy.be\/blog\/60","title":{"rendered":"Zend Framework (ZF) : un livre d&rsquo;or, troisi\u00e8me \u00e9tapes : Bases des fichiers"},"content":{"rendered":"<h2>Cr\u00e9ations d&rsquo;un livre d&rsquo;or en 6 \u00e9tapes<\/h2>\n<ol>\n<li><a href=\"?p=58\">D\u00e9finition<\/a><\/li>\n<li><a href=\"?p=59\">Cr\u00e9ations des tables sql et des r\u00e9pertoires<\/a><\/li>\n<li><a href=\"?p=60\">Bases des fichiers<\/a><\/li>\n<li><a href=\"?p=63\">Affichages et ajout de messages<\/a><\/li>\n<li><a href=\"?p=64\">Modification et suppression des messages<\/a><\/li>\n<li><a href=\"?p=65\">Conclusions<\/a><\/li>\n<\/ol>\n<h3>Bases des fichiers<\/h3>\n<p>Avant tout, il nous faut cr\u00e9er les diff\u00e9rents fichier <strong>.htaccess<\/strong><\/p>\n<pre> RewriteEngine on #RewriteBase \/serveur\/mon_repertoire\/ RewriteRule .* index.php php_flag magic_quotes_gpc off php_flag register_globals off<\/pre>\n<p>La ligne en commentaire, permet dans le cas d&rsquo;une erreur de ce type\u00a0: <q>Fatal error: Uncaught exception &lsquo;Zend_Controller_Dispatcher_Exception&rsquo; with message &lsquo;Invalid controller specified (serveur)&rsquo; in<\/q> de corriger le probl\u00e8me, pour un acc\u00e8s, par exemple, via\u00a0: http:\/\/localhost\/serveur\/mon_repertoire\/<\/p>\n<p><strong>LivreControllers.php<\/strong><\/p>\n<pre> &lt;?php \/** Zend_Controller_Action *\/ require_once 'Zend\/Controller\/Action.php'; class LivreController extends Zend_Controller_Action { \tpublic function indexAction() \t{ \t\techo 'Index du livre d\\'or'; \t\treturn; \t} \tpublic function ajouterAction() \t{ \t\t$this-&gt;view-&gt;title .= ' .: Ajout d\\'un message'; \t\techo 'ajout d\\'un message!'; \t\treturn; \t} }<\/pre>\n<p>Le controlleur, c&rsquo;est ce qui va diriger notre application<\/p>\n<p><strong>index.php<\/strong><\/p>\n<pre> &lt;?php error_reporting(E_ALL|E_STRICT); date_default_timezone_set('Europe\/Brussels'); set_include_path('.' . PATH_SEPARATOR . '..\/site\/lib' . PATH_SEPARATOR . '.\/app\/models\/'  . PATH_SEPARATOR . get_include_path()); include 'Zend\/Loader.php'; Zend_Loader::loadClass('Zend_Controller_Front'); Zend_Loader::loadClass('Zend_Config_Ini'); Zend_Loader::loadClass('Zend_Registry'); Zend_Loader::loadClass('Zend_Db'); \/\/ load configuration $config = new Zend_Config_Ini('.\/app\/config.ini', 'general'); $registry = Zend_Registry::getInstance(); $registry-&gt;set('config', $config); \/\/ setup database $db = Zend_Db::factory($config-&gt;db-&gt;adapter,  $config-&gt;db-&gt;config-&gt;toArray()); Zend_Db_Table::setDefaultAdapter($db); \/\/ R\u00e9gler le dossier des contr\u00f4leurs par d\u00e9faut : $frontController = Zend_Controller_Front::getInstance(); $frontController-&gt;throwExceptions(true); $frontController-&gt;setControllerDirectory('.\/app\/controllers'); \/\/ run! $frontController-&gt;dispatch();<\/pre>\n<p><strong>Livre.php<\/strong><\/p>\n<pre> &lt;?php Zend_Loader::loadClass('Zend_Db_Table'); class Livre extends Zend_Db_Table {     protected $_name = 'livre';     protected $_primary = 'id'; \tpublic function insertObject($object) \t{ \t\treturn parent::insert((array) $object); \t} \tpublic function updateObject($object, $where) \t{ \t\treturn $this-&gt;update((array) $object, $where); \t} }<\/pre>\n<p>Le mod\u00e8le du livre, c&rsquo;est-\u00e0-dire les donn\u00e9es -&gt; ici la base des donn\u00e9es.<\/p>\n<p><strong>Date.php<\/strong><\/p>\n<pre> &lt;?php class MyWsp_View_Helper_Date { \t\/** \t * Retourne une date sous forme d'une cha\u00eene, au format donn\u00e9 par le \t * param\u00e8tre format, fournie par le param\u00e8tre timestamp ou la date et \t * l'heure courantes si aucun timestamp n'est fourni. En d'autres termes, \t * le param\u00e8tre timestamp est optionnel et vaut par d\u00e9faut la valeur de la \t * fonction time(). \t * Plus d'info sur http:\/\/www.php.net\/manual\/fr\/function.date.php \t * \t * @param string $format format de la date \t * @param int $timestampdate \u00e0 format\u00e9 \t * \t * @return string \t *\/ \tpublic function date($format, $timestamp = null) \t{ \t\tif (!is_nan($timestamp)) \t\t\t$timestamp = time(); \t\t\/\/ see http:\/\/www.php.net\/manual\/fr\/function.strftime.php \t\t$dates = array( \t\t\t'DDDD'\t=&gt; '%A', \t\t\t'DDD'\t=&gt; '%a', \t\t\t'DD'\t=&gt; '%d', \t\t\t'D'\t\t=&gt; '%e', \t\t\t'MMMM'\t=&gt; '%B', \t\t\t'MMM'\t=&gt; '%b', \t\t\t'MM'\t=&gt; '%m', \t\t\t'YYYY'\t=&gt; '%Y', \t\t\t'YY'\t=&gt; '%y', \t\t\t'HH'\t=&gt; '%H', \t\t\t'hh'\t=&gt; '%I', \t\t\t'mm'\t=&gt; '%M', \t\t\t'ss'\t=&gt; '%S', \t\t); \t\treturn strftime(str_replace(array_keys($dates), array_values($dates), $format), $timestamp); \t} }<\/pre>\n<p><strong>config.ini<\/strong><\/p>\n<pre> [general] db.adapter = PDO_MYSQL db.config.host = localhost db.config.username = root db.config.password = db.config.dbname = livredor<\/pre>\n<p>Contient la configuration pour acc\u00e9der \u00e0 la base de donn\u00e9e du livre d&rsquo;or.<\/p>\n<h4>Test<\/h4>\n<p>Rendez-vous \u00e0 l&rsquo;adresse de votre script\u00a0:<\/p>\n<ul>\n<li>Lire les messages\u00a0: http:\/\/localhost\/serveur\/mon_repertoire\/livre\/<\/li>\n<li>Ajouter un message\u00a0: http:\/\/localhost\/serveur\/mon_repertoire\/livre\/ajouter\/<\/li>\n<\/ul>\n<p>Si tout est ok, passons \u00e0 la suite!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cr\u00e9ations d&rsquo;un livre d&rsquo;or en 6 \u00e9tapes D\u00e9finition Cr\u00e9ations des tables sql et des r\u00e9pertoires Bases des fichiers Affichages et ajout de messages Modification et suppression des messages Conclusions Bases des fichiers Avant tout, il nous faut cr\u00e9er les diff\u00e9rents fichier .htaccess RewriteEngine on #RewriteBase \/serveur\/mon_repertoire\/ RewriteRule .* index.php php_flag magic_quotes_gpc off php_flag register_globals off [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[9],"tags":[22,110,24,42,65,37,64],"class_list":["post-60","post","type-post","status-publish","format-standard","hentry","category-dev","tag-jouons","tag-php","tag-programmation","tag-script","tag-tutoriel","tag-web","tag-zf"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/60","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/comments?post=60"}],"version-history":[{"count":1,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/60\/revisions"}],"predecessor-version":[{"id":206,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/60\/revisions\/206"}],"wp:attachment":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/media?parent=60"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/categories?post=60"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/tags?post=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}