• Aucun résultat trouvé

Installation avancée et URL Rewriting Installation avancée

Installation avancée

Installer CakePHP avec l’installeur PEAR

CakePHP publie un package PEAR que vous pouvez installer en utilisant l’installeur pear. L’installation avec l’installeur PEAR peut simplifier le partage des librairies de CakePHP sur plusieurs applications. Pour installer CakePHP avec pear, vous devrez faire comme suit :

pear channel-discover pear.cakephp.org pear install cakephp/CakePHP

Note : Sur certains systèmes, l’installation de librairies avec pear nécessitera la commande sudo.

Après avoir installé CakePHP avec pear, si pear est configuré correctement, vous devriez pouvoir utiliser la commande cake pour créer une nouvelle application. Puisque CakePHP sera localisé dans l’include_path de PHP, vous n’aurez pas besoin de faire d’autres changements.

CakePHP Cookbook Documentation, Version 2.x

Installer CakePHP avec composer

Composer est un outil de gestion de dépendance pour PHP 5.3+. Il règle plusieurs problèmes que l’in- stalleur PEAR a, et simplifie la gestion de plusieurs versions de librairies. Puisque CakePHP publie un

package PEAR, vous pouvez installer CakePHP en utilisantcomposer(http ://getcomposer.org). Avant d’in-

staller CakePHP, vous devrez configurer un fichier composer.json. Un fichier composer.json pour une application CakePHP ressemblerait à ce qui suit :

{ "name": "example-app", "repositories": [ { "type": "pear", "url": "http://pear.cakephp.org" } ], "require": { "pear-cakephp/cakephp": ">=2.3.4" }, "config": { "vendor-dir": "Vendor/" } }

Sauvegarder ce JSON dans composer.json dans le répetoire racine de votre projet. Ensuite, télécharger le fichier composer.phar dans votre projet. Après avoir téléchargé composer, installez CakePHP. Dans le même répertoire que votre fichier composer.json, lancez ce qui suit :

$ php composer.phar install

Une fois que composer a terminé son exécution, vous devriez avoir une structure de répertoire qui ressemble à : example-app/ composer.phar composer.json Vendor/ bin/ autoload.php composer/

pear-pear.cakephp.org/

Vous êtes maintenant prêt à générer le reste du squelette de votre application : $ Vendor/bin/cake bake project <path to project>

Par défaut bake va hard-codeCAKE_CORE_INCLUDE_PATH. Pour rendre votre application plus portable,

vous devrez modifier webroot/index.php, en changeant CAKE_CORE_INCLUDE_PATH en un chemin relatif :

define(

’CAKE_CORE_INCLUDE_PATH’,

ROOT . DS . APP_DIR . ’/Vendor/pear-pear.cakephp.org/CakePHP’ );

Si vous installez d’autres librairies avec composer, vous devrez configurer l’autoloader, et régler un problème dans l’autoloader de composer. Dans votre fichier Config/bootstrap.php, ajoutez ce qui suit : // Charger l’autoload de composer.

require APP . ’/Vendor/autoload.php’;

// Retire et re-prepend l’autoloader de CakePHP puisque composer pense que c’est le plus important. // See https://github.com/composer/composer/commit/c80cb76b9b5082ecc3e5b53b1050f76bb27b127b

spl_autoload_unregister(array(’App’, ’load’));

spl_autoload_register(array(’App’, ’load’), true, true);

Vous devriez maintenant avoir une application CakePHP fonctionnelle avec CakePHP installé via composer. Assurez-vous de garder les fichiers composer.json et composer.lock.json avec le reste de votre code source.

Partager les librairies de CakePHP pour plusieurs applications

Il peut y avoir des situations où vous voulez placer les répertoires de CakePHP à différents endroits du système de fichiers. Cela est peut être dû à des restrictions de l’hôte partagé, ou peut-être souhaitez-vous juste que quelques-unes de vos apps puissent partager les mêmes librairies de CakePHP. Cette section décrit comment déployer vos répertoires de CakePHP à travers le système de fichiers.

Premièrement, réalisez qu’il y a trois parties principales d’une application Cake : 1. Les librairies du coeur de CakePHP, dans /lib/Cake.

2. Le code de votre application, dans /app.

3. Le webroot de l’application, habituellement dans /app/webroot.

Chacun de ces répertoires peut être situé n’importe où dans votre système de fichier, avec l’exception de we- broot, qui a besoin d’être acessible pour votre serveur web. Vous pouvez même déplacer le dossier webroot en-dehors du dossier app tant que vous dîtes à Cake où vous le mettez.

Pour configurer votre installation de Cake, vous aurez besoin de faire quelques changements aux fichiers suivants.

– /app/webroot/index.php

– /app/webroot/test.php (si vous utilisez la fonctionnalité deTesting.)

Il y a trois constantes que vous devrez modifier : ROOT, APP_DIR, et CAKE_CORE_INCLUDE_PATH. – ROOT doit être définie vers le chemin du répertoire qui contient le dossier app.

– APP_DIR doit être définie vers le nom (de base) de votre dossier app.

– CAKE_CORE_INCLUDE_PATH doit être définie vers le chemin du dossier des librairies de CakePHP. Testons cela avec un exemple pour que vous puissiez voir ce à quoi peut ressembler une installation avancée en pratique. Imaginez que je souhaite configurer CakePHP pour travailler comme ce qui suit :

– Les librairies du coeur de CakePHP seront placées dans /usr/lib/cake. – Le répertoire webroot de l’application sera /var/www/monsite/. – Le répertoire app de mon application sera /home/moi/monapp.

CakePHP Cookbook Documentation, Version 2.x

Etant donné ce type de configuration, j’aurais besoin de modifier mon fichier webroot/index.php (ce qui finira dans /var/www/mysite/index.php, dans cet exemple) pour ressembler à ce qui suit :

// /app/webroot/index.php (partiel, commentaires retirés)

if (!defined(’ROOT’)) {

define(’ROOT’, DS.’home’.DS.’moi’); }

if (!defined(’APP_DIR’)) {

define (’APP_DIR’, ’monapp’); }

if (!defined(’CAKE_CORE_INCLUDE_PATH’)) {

define(’CAKE_CORE_INCLUDE_PATH’, DS.’usr’.DS.’lib’); }

Il est recommandé d’utiliser la constante DS plutôt que des slashes pour délimiter des chemins de fichier. Cela empêche les erreurs de fichiers manquants que vous pourriez obtenir en résultats en utilisant le mauvais délimiteur, et cela rend votre code plus portable.

Apache et mod_rewrite (et .htaccess)

Cette section a été déplacée versURL rewriting.

URL Rewriting

Apache et mod_rewrite (et .htaccess)

Alors que CakePHP est construit pour travailler avec mod_rewrite –et habituellement il l’est– nous avons remarqué que certains utilisateurs se battent pour obtenir un bon fonctionnement sur leurs systèmes. Ici il y a quelques trucs que vous pourriez essayer pour que cela fonctionne correctement. Premièrement, regardez votre fichier httpd.conf (Assurez vous que vous avez éditer le httpd.conf du système plutôt que celui d’un utilisateur- ou le httpd.conf d’un site spécifique).

1. Assurez-vous qu’un .htaccess est permis et que AllowOverride est défini à All pour le DocumentRoot correct. Vous devriez voir quelque chose comme :

# Chaque répertoire auquel Apache a accès peut être configuré avec # respect pour lesquels les services et les fonctionnalités sont

# autorisés et/ou désactivés dans ce répertoire (et ses sous-répertoires). #

# Premièrement, nous configurons "par défault" pour être un ensemble # très restrictif de fonctionnalités. # <Directory /> Options FollowSymLinks AllowOverride All # Order deny,allow

# Deny from all

</Directory>

2. Assurez-vous que vous avez chargé correctement mod_rewrite. Vous devriez voir quelque chose comme :

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

Dans la plupart des systèmes, ceux-ci vont être commentés (en étant précédé par un #) par défaut, donc vous aurez juste besoin de retirer les symboles # du début.

Après que vous avez fait des changements, re-démarrez Apache pour être sûr que les paramètres soient actifs.

Vérifiez que vos fichiers .htaccess sont effectivement dans le bon répertoire.

Cela peut arriver pendant la copie parce que certains systèmes d’exploitation traitent les fichiers qui commencent par ‘.’ en caché et du coup ne les voient pas pour les copier.

3. Assurez-vous que votre copie de CakePHP vient de la section des téléchargements du site de notre dépôt GIT, et a été dézippé correctement en vérifiant les fichiers .htaccess.

Le répertoire root de Cake (a besoin d’être copié dans votre document, cela redirige tout vers votre app Cake) :

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L]

</IfModule>

Le répertoire app de Cake (sera copié dans le répertoire supérieur de votre application avec Bake) :

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteRule ^$ webroot/ [L]

RewriteRule (.*) webroot/$1 [L]

</IfModule>

Le répertoire webroot de Cake (sera copié dans le webroot de votre application avec Bake) :

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*) $ index.php/$1 [QSA,L]

</IfModule>

Si votre site Cakephp a toujours des problèmes avec mod_rewrite, essayez de modifier les paramètres pour les virtualhosts. Si vous êtes sur ubuntu, modifiez le fichier /etc/apache2/sites-available/default (l’endroit dépend de la distribution). Dans ce fichier, assurez-vous que AllowOverride None a changé en AllowOverride All, donc vous avez :

<Directory />

Options FollowSymLinks AllowOverride All

</Directory>

CakePHP Cookbook Documentation, Version 2.x

<Directory /var/www>

Options Indexes FollowSymLinks MultiViews AllowOverride All

Order Allow,Deny Allow from all

</Directory>

Si vous êtes sur Mac OSX, une autre solution est d’utiliser l’outil virtualhostx pour faire un hôte virtuel pour pointer vers votre dossier.

Pour beaucoup de services d’hébergement (GoDaddy, 1and1), votre serveur web est en fait déjà dis- tribué à partir d’un répertoire utilisateur qui utilise déjà mod_rewrite. Si vous installez CakePHP dans un répertoire utilisateur (http ://exemple.com/~username/cakephp/), ou toute autre structure d’URL qui utilise déjà mod_rewrite, vous aurez besoin d’ajouter les requêtes (statements) RewriteBase aux fichiers .htaccess que CakePHP utilise (/.htaccess, /app/.htaccess, /app/webroot/.htaccess).

Ceci peut être ajouté à la même section avec la directive RewriteEngine, donc par exemple, votre fichier .htaccess dans webroot ressemblerait à ceci :

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /path/to/cake/app

RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*) $ index.php/$1 [QSA,L]

</IfModule>

Les détails de ces changements dépendront de votre configuration, et pourront inclure des choses supplémentaires qui ne sont pas liées à CakePHP. Merci de vous renseigner sur la documentation en ligne d’Apache pour plus d’informations.

4. (Optionel) Pour améliorer la configuration de production, vous devriez empêcher les assets invalides d’être parsés par CakePHP. Modifier votre webroot .htaccess pour quelque chose comme :

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /path/to/cake/app

RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !^/(app/webroot/)?(img|css|js)/(.*) $ RewriteRule ^(.*) $ index.php [QSA,L]

</IfModule>

Ce qui est au-dessus va simplement empêcher les assets incorrects d’être envoyés à index.php et à la place d’afficher la page 404 de votre serveur web.

De plus, vous pouvez créer une page HTML 404 correspondante, ou utiliser la page 404 de CakePHP intégrée en ajoutant une directive ErrorDocument :

ErrorDocument 404 /404-not-found

De belles URLs sur nginx

nginx est un serveur populaire qui, comme Lighttpd, utilise moins de ressources système. Son inconvénient est qu’il ne fait pas usage de fichiers .htaccess comme Apache et Lighttpd, il est donc nécessaire de créer

les URLs réécrites dans la configuration du site disponibles. selon votre configuration, vous devrez modifier cela, mais à tout le moins, vous aurez besoin de PHP fonctionnant comme une instance FastCGI.

server {

listen 80;

server_name www.example.com;

rewrite ^(.*) http://example.com $1 permanent; }

server {

listen 80;

server_name example.com;

# root directive should be global

root /var/www/example.com/public/app/webroot/; index index.php;

access_log /var/www/example.com/log/access.log;

error_log /var/www/example.com/log/error.log; location / {

try_files $uri $uri/ /index.php?$uri&$args; }

location ~ \.php $ {

include /etc/nginx/fastcgi_params; try_files $uri =404;

fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }

}

Rewrites d’URL sur IIS7 (serveurs Windows)

IIS7 ne supporte pas nativement les fichiers .htaccess. Bien qu’il existe des add-ons qui peuvent ajouter ce support, vous pouvez aussi importer les règles des .htaccess dans IIS pour utiliser les rewrites natifs de CakePHP. Pour ce faire, suivez ces étapes :

1. Utilisezl’installeur de la plateforme Web de Microsoft(http ://www.microsoft.com/web/downloads/platform.aspx)

pour installer l’URL Rewrite Module 2.0 (http ://www.iis.net/downloads/microsoft/url-rewrite) ou

télécharger le directement (32-bit(http ://www.microsoft.com/en-us/download/details.aspx ?id=5747)

/64-bit(http ://www.microsoft.com/en-us/download/details.aspx ?id=7435)). 2. Créez un nouveau fichier dans votre dossier CakePHP, appelé web.config.

3. Utilisez Notepad ou tout autre éditeur XML-safe, copiez le code suivant dans votre nouveau fichier web.config...

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

<system.webServer> <rewrite>

CakePHP Cookbook Documentation, Version 2.x

<rules>

<rule name="Rewrite requests to test.php" stopProcessing="true"> <match url="^test.php(.*)$" ignoreCase="false" />

<action type="Rewrite" url="app/webroot/test.php{R:1}" /> </rule>

<rule name="Exclude direct access to app/webroot/*" stopProcessing="true"> <match url="^app/webroot/(.*)$" ignoreCase="false" />

<action type="None" /> </rule>

<rule name="Rewrite routed access to assets (img, css, files, js, favicon)" stopProcessing="true"> <match url="^(img|css|files|js|favicon.ico)(.*)$" />

<action type="Rewrite" url="app/webroot/{R:1}{R:2}" appendQueryString="false" /> </rule>

<rule name="Rewrite requested file/folder to index.php" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" />

<action type="Rewrite" url="index.php" appendQueryString="true" /> </rule>

</rules> </rewrite> </system.webServer> </configuration>

Une fois que le fichier web.config est créé avec les bonnes règles de réécriture des liens de IIS, les liens CakePHP, les CSS, les JS, et le reroutage devraient fonctionner correctement.

Je ne veux / ne peux utiliser l’URL rewriting

Si vous ne voulez ou ne pouvez pas utiliser l’URL rewriting sur votre serveur web, référez-vous à la section core configuration.