Table of Contents : Le Manuel

Installation avancée

Il peut y avoir des situations où vous souhaitez placer les répertoires de CakePHP à différents endroits du système de fichiers. Cela peut être du à des restrictions en hébergement mutualisé ou peut-être que vous voulez simplement partager vos librairies Cake entre plusieurs de vos applications. Cette section décrit comment dérouler vos répertoires CakePHP à travers un système de fichiers.

D’abord, sachez qu’il y a 3 parties principales dans une application Cake :

  1. Les librairies du cœur de CakePHP, dans /cake.
  2. Le code de votre application, dans /app
  3. La racine web de l’application, habituellement dans /app/webroot

Chacun de ces répertoires peut être situé n’importe où dans votre système de fichier, à l’exception de /webroot, qui doit être accessible via votre serveur web. Vous pouvez même déplacer ce répertoire webroot en dehors du répertoire app, tant que vous dites à Cake où vous le mettez.

Pour configurer votre installation Cake, vous aurez besoin de faire quelques modifications dans le fichier /app/webroot/index.php. Il y a trois constantes que vous devrez éditer : ROOT, APP_DIR, et CAKE_CORE_INCLUDE_PATH.

  • ROOT devrait être défini sur le chemin du répertoire qui contient votre dossier /app
  • APP_DIR devrait être défini sur le chemin du répertoire /app lui-même
  • CAKE_CORE_INCLUDE_PATH devrait être défini sur le chemin de votre dossier des librairies CakePHP

Lançons-nous dans un exemple, ainsi vous pourrez voir à quoi doit ressembler, en pratique, une installation avancée. Imaginez que je veuille configurer CakePHP pour fonctionner de la manière suivante :

  • Les librairies du cœur de CakePHP seront placées dans /usr/lib/cake.
  • Le répertoire webroot de mon application sera placé dans var/www/monsite/
  • Le répertoire app de mon application sera placé dans /home/moi/monsite.

Etant donné ce type de configuration, j’aurais besoin d’éditer mon fichier /webroot/index.php (qui se trouvera à /var/www/monsite/index.php, dans cet exemple) afin qu’il ressemble à ce qui suit :

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

if (!defined('ROOT')) {
    define('ROOT', DS.'home'.DS.'moi');
}

if (!defined('APP_DIR')) {
    define ('APP_DIR', 'monsite');
}

if (!defined('CAKE_CORE_INCLUDE_PATH')) {
    define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'.DS.'cake');
}
  1. // /app/webroot/index.php (partiel, commentaires supprimés)
  2. if (!defined('ROOT')) {
  3. define('ROOT', DS.'home'.DS.'moi');
  4. }
  5. if (!defined('APP_DIR')) {
  6. define ('APP_DIR', 'monsite');
  7. }
  8. if (!defined('CAKE_CORE_INCLUDE_PATH')) {
  9. define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'.DS.'cake');
  10. }

Il est recommandé d'utiliser la constante DS (directory separator) plutôt que les slashs pour délimiter les chemins de fichier. Cela évite toute erreur de fichier introuvable que vous pourriez avoir en utilisant un mauvais délimiteur et cela rend votre code davantage portable.

Chemins de classes additionnels

C’est parfois pratique de pouvoir partager les classes MVC entre applications au sein d’un même système. Si vous voulez le même contrôleur dans 2 applications, vous pouvez utiliser le fichier bootstrap.php de CakePHP pour disposer de ces classes additionelles dans une vue.

Dans bootstrap.php, définissez quelques variables nommées de façon particulière pour rendre CakePHP conscient des autres emplacements de classes MVC à explorer :

$viewPaths        = array();
$controllerPaths  = array();
$modelPaths       = array();
$helperPaths      = array();
$componentPaths   = array();
$behaviorPaths    = array();
  1. $viewPaths = array();
  2. $controllerPaths = array();
  3. $modelPaths = array();
  4. $helperPaths = array();
  5. $componentPaths = array();
  6. $behaviorPaths = array();

Chacune de ces variables spéciales peut être définie par un tableau de chemins absolus dans le système de fichiers, indiquant où les classes complémentaires peuvent être trouvées quand elles sont demandées. Assurez-vous que chaque chemin spécifié contienne un slash terminal.