[Mémo] Dossiers images, scripts et stylesheets sur Zend Framework MVC

Flattr this!

J'ai pas mal galéré avec ce problème et la doc sur internet à propos de ce problème est on ne peut plus... inexistante.

L'idée est de stocker des images, des scripts ou encore vos css dans le dossier public de votre projet Zend Framework (ce qui ne semble pas idiot en soit). Après avoir fait pointer votre document_root sur le dossier public, vous créez votre dossier images et vous appelez l'URL suivante :

Et là le drame, un message d'erreur qui vous dit que le contrôleur images n'existe pas. 2 choix se proposent alors à vous :

  • un serveur de média séparé (ce qui en soit peut-être pas mal) ;
  • faire en sorte qu'il n'aille pas chercher ce pu**in de contrôleur images mais bien le dossier dans public.

La première option, je vous laisse gérer, vous êtes grands, vous savez sûrement déjà installer apache.

Dans le deuxième cas, il existe un fichier .zfproject.xml à la racine de votre application. Editez ce fichier, vers la fin, vous devriez avoir ce bloc :

<publicDirectory>
    <publicStylesheetsDirectory enabled="false"/>
    <publicScriptsDirectory enabled="false"/>
    <publicImagesDirectory enabled="false"/>
    <publicIndexFile filesystemName="index.php"/>
    <htaccessFile filesystemName=".htaccess"/>
</publicDirectory>

Vous voyez les trois false qui se promènent ? Vous les remplacer par des true et paf ça a fait des... ça vous a évité un assassinat de votre machine. Ne vous reste plus qu'à mettre un dossier scripts, un images et un stylesheets dans public et à y mettre ce que vous avez besoin.

Vous savez désormais afficher des images, appeler des scripts et des feuilles de style sans avoir l'erreur qui vous dit que le contrôleur images n'existe pas !

Flattr this!

A propos de Mathieu

Ingénieur développeur web dans la vente par correspondance B2B, adepte de nouvelles technologies et d'innovation. Vous pouvez aussi me retrouver sur Twitter @mathrobin
Cette entrée a été publiée dans PHP, avec comme mot(s)-clef(s) , , , , , , , . Vous pouvez la mettre en favoris avec ce permalien.
  • artisson

    Salut,
    On peut aussi, dans la règle de réécriture du fichier .htaccess, lui dire de n’appliquer la redirection vers index.php que si ce n’est pas un fichier, un répertoire ou un lien symbolique existant.

    RewriteEngine on
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-l
    RewriteRule ^(.*)$ index.php

    De cette manière il n'essaye de router via ZF que si on essayer d'accéder à une ressource qui n'existe pas.

    Greg

    • http://www.mathieurobin.com/ Mathieu

      Effectivement, c’est une troisième option valable, mais j’ai un problème avec cette façon de faire. On contourne un truc qui est déjà définit ailleurs. C’est un peu comme si on faisait de la duplication. Certes parfois on n’a pas toujours le choix malheureusement, mais si je peux éviter…

      • Pascal

        Il me semble que cette manière est ce que fait ZF en standard quand on utilise les outils pour générer le projet.
        J’avais pas encore vu cette histoire de XML, mais je conseillerait personnellement le htaccess… Car le fait que le framework ait un XML a parser pour chaque requete d’image / css et autres…, c’est pas l’idéal 😉

        • http://www.mathieurobin.com/ Mathieu

          Yep, c’est ce que fait le framework quand on utilise le zend tool. Il créé le fichier XML et le parse pour savoir quoi faire. Reste à voir si il le fait à chaque requête ou si le résultat de ce parse a été stocké quelque part pour être réutilisable par tous. Si c’est pas le cas, effectivement, je vais devoir revoir ma copie.

          • Pascal

            Hmmm, je vais retester a l’occasion, ca a peut etre changé.
            La dernière fois que j’ai testé j’avais bien le .htaccess décrit plus haut dans le dossier public…
            En théorie on fait pointer apache sur ce fameux dossier.
            Le .htaccess sert les fichiers existants dans ce dossier en priorité (bypass du framework), sinon le fichier index.php prend la relève et crée le bootstrap du framework.
            En fait après avoir checké un peu le .zfproject.xml, il s’agit en fait d’un XML servant a Zend Tools. J’imagine qu’après avoir édité ton fichier tu dois avoir à lancer une commande zend tools pour que ce soit pris en compte non (et que ce mette a jour tout seul le .htaccess)? Dans ce cas ça prendrait tout son sens…

          • http://www.mathieurobin.com/ Mathieu

            Ben en fait, je sais pas si il a mis à jour un htaccess, ce que je peux te dire, c’est que je n’ai rien lancé. Donc il y a moyen que le XML soit parsé de façon soit systématique, soit si date de dernier parse est avant la date de modification du fichier. Mais vu que je ne vois pas où il stocke la date. Il y a moyen qu’en effet, le XML ne soit pas intéressant. De façon générale, je réfléchis de toute façon à m’en débarrasser, c’est chiant à maintenir, parce que chaque contrôleur, chaque action et chaque vue doit y être indiquée. Niveau maintenabilité, c’est un peu lourd. Surtout que j’ai remplacé les vues normales par des templates Twig et donc que ça fait plein d’infos inutiles dans le XML.

  • http://www.pure-tentation.fr/ Syndrael

    Le temps me manque cruellement pour Zend mais toujours utile de le savoir..

Articles liés