Contrôleurs

Catégorie : Manuel
Un contrôleur permet de gérer le code logique d'une partie spécifique d'une application. Généralement, il existe un contrôleur pour chaque modèle.
Ainsi, si vous avez une application vous permettant de gérer la location de vidéos, vous aurez deux modèles : Video et Location. Vous aurez également deux contrôleurs : VideosController et LocationController. Les noms des contrôleurs doivent être au pluriel.

Vos contrôleurs sont des classes héritant de AppController, qui est elle même héritée de la classe Controller.
Vous pouvez personnaliser la classe AppController afin d'y ajouter des méthodes qui seront partagées par tous vos contrôleurs en créant le fichier app/app_controller.php.

Une action est une méthode spécifique d'un contrôleur. Elle est appelée automatiquement par le dispatcheur lorsque l'URL appropriée est chargée.
Ainsi, si vous avez votre contrôleur Videos comme ceci :

class VideosController extends AppController
{
function view($id)
{
//
Contenu de l'action ici
}

function rent($customer_id, $video_id)
{
//
Contenu de l'action ici
}

function search($query)
{
//Contenu de l'action ici
}
}


Vous pourrez accéder à ces actions en appelant les url suivantes par exemple :
https://www.example.com/videos/view/253
https://www.example.com/videos/rent/5124/0-235253
https://www.example.com/videos/search/hudsucker+proxy
Mais pour que vos pages aient un visuel correct, vous devez définir une vue pour chacune de ces actions. Pour cela, voyez le chapitre approprié aux vues.

Fonctions des contrôleurs
Dans cette section, nous allons voir les diverses fonctions accessibles depuis le contrôleur. Pour plus de détails sur celles-ci, voyez api.cakephp.org.

Interagir avec les vues
  • set

    • string $var
    • mixed $value
Vous permet de passer une variable quelconque à votre vue. Si vous appelez set('color', 'bleu'); dans votre contrôleur, la variable $color sera alors accessible dans la vue.

  • validateErrors

Retourne le nombre d'erreurs générées par un save échoué.

  • validate
Valide les données du modèle associé. Pour plus d'informations, voir le chapitre "validations".

  • render
    • string $action
    • string $layout
    • string $file
Cette fonction permet d'afficher le contenu d'une vue. Vous n'avez normalement pas besoin d'utiliser cette fonction puisqu'elle est appelée automatiquement après l'exécution de votre action.

Redirection des utilisateurs
  • redirect

    • string $url
Redirige l'utilisateur vers l'url passée en paramètre. Celle-ci peut être une url interne à cake, ou une url externe en commençant pas https://.

  • flash
    • string $message
    • string $url
    • int $pause
Cette fonction va afficher le contenu du layout app/views/layouts/flash.thtml avec le message $message, puis redirigera l'utilisateur vers $url au bout de $pause secondes.

Ces deux fonctions ne contiennent pas de die() ou exit(). Si vous souhaitez, après avoir redirigé, arrêter l'exécution du script, vous devrez l'ajouter manuellement.

Callbacks
Il existe plusieurs méthodes appelées automatiquement à divers moments de la vie du contrôleur. Vous pouvez placer le code que vous désirez dans ces fonctions.

  • beforeFilter
Méthode appelée avant l'appel à l'action en cours.
  • afterFilter
Méthode appelée après l'appel à l'action en cours.

  • beforeRender
Méthode appelée juste avant l'appel à la vue.

Autres fonctions utiles
  • requestAction
    • string $url
    • array $extra
Cette méthode exécute une autre action de votre contrôleur et renvoie son contenu.
l'URL est l'url d'une action Cake (/controlleur/action/params)

Ainsi, si vous avez un élément affiché plusieurs fois dans des actions différentes, vous pouvez créer une action affichant cet élément. Et vous l'appelez ensuite dans les actions qui en ont besoin :

class ProgramsController extends AppController
{
function viewAll()
{
$this->set('userTable', $this->requestAction('/users/getUserList', array('return')));

// Notre vue contient la variable $userTable que nous pouvons afficher afin de visualiser le code présent dans /users/getUserList
}
}

  • log
    • string $message
    • int $type = LOG_ERROR
Vous pouvez exécuter cette action pour journaliser les divers évènements de vos contrôleurs dans le répertoire temporaire (/tmp)
Si la variable $type est égale à la constante LOG_ERROR, l'erreur est stockée comme un signalement de débogage.
Dans le cas contraire, elle est stockée comme une erreur.

$this->log('Mayday! Mayday!');
//Contenu du journal :

06-03-28 08:06:22 Error: Mayday! Mayday!

$this->log("{$_SESSION['user']} vient juste de s'identifier.", LOG_DEBUG);
//Contenu du journal:

06-03-28 08:06:22 Debug: Bobby vient juste de s'identifier.


  • postConditions
    • array $datas
Cette méthode vous permet de formater un tableau de données passées en arguments au format d'une vue en un tableau au format d'un modèle.

Par exemple, si vous avez un tableau venant d'un formulaire ressemblant à :

Array
(
[Personne] => Array
(
[nom] => Anderson
)
)

Alors, en passant ce tableau à postConditions, vous obtiendrez le tableau suivant :

Array
(
[Personne.nom] => Anderson
)

Qui peut être passé comme conditions à un findAll, facilitant la mise en place d'un moteur de recherche par exemple.

Variables
Modifier les valeurs de certaines variables de vos contrôleurs peuvent vous permettre de personnaliser ceux-ci. Voici une liste de ces variables :

  • $name
PHP4 supporte mal la récupération automatique du nom du contrôleur. Définissez le ici manuellement si vous rencontrez des problèmes.

  • $uses
Par défaut, le modèle utilisé par votre contrôleur sera du même nom que celui-ci. Cependant, vous pouvez avoir besoin d'en utiliser d'autres. Pour cela, placez un tableau dans cette variable, contenant tous vos modèles. Exemple : array('Post', 'Categorie', 'User')

  • $helpers
Utilisez cette variable pour lister les helpers qui seront chargés en même temps que votre contrôleur. L'helper HTML est chargé automatiquement.
Exemple : array('html', 'ajax', 'javascript')

  • $layout
Définissez cette variable pour modifier le fichier d'en-tête et footer de votre page. Se réfère au fichier situé dans app/views/layouts/$layout.thtml

  • $autoRender
Si vous définissez cette variable à false, la vue ne sera pas appelée.

  • $beforeFilter
Si vous souhaitez exécuter une fonction avant chaque appel à une action, définissez la ici.
Exemple :
var $beforeFilter = array('checkAccess');

function checkAccess() {
//Code de votre fonction
}


  • $components
Fonctionnant de la même manière que $helpers et $uses, cette fonction permet de spécifier les components à charger dans votre contrôleur.

Paramètres
Les paramètres des contrôleurs sont disponibles en passant par l'url $this->paramètre. Ils permettent de récupérer des informations diverses de votre contrôleur. Les informations passées en POST ou en GET par exemple.

  • $this->data
contient le contenu de vos formulaires respectant les règles de nommage. Plus simplement, elle contient le contenu de POST['data']

  • $this->params['form']
Contient les variables passées à la page avec la méthode POST ou FILES.

  • $this->params['bare']
Contient 1 si le layout actuel est 'bare'; 0 sinon.

  • $this->params['ajax']
Contient 1 si le layout actuel est 'ajax'; 0 sinon.

  • $this->params['controller']
Contient le nom du contrôleur actuel. Par exemple, si vous êtes sur la page /posts/view/1, la variable contiendra la valeur 'posts'.

  • $this->params['pass']
Contient la requete GET passée au contrôleur. Par exemple, si vous êtes sur /posts/view/?var1=1&var2=2, la variable contiendra ?var1=1&var2=2.

  • $this->params['url']
Contient le contenu des variables passées à la page avec la méthode GET, sous la forme d'un tableau.



Identification

Statistiques

153 utilisateurs
32 articles
6 connectes

CakePHP-fr

Actualites

PHP 5.2.2 et PHP 4.4.7
L'équipe de développement de PHP ...
Poste le : 04/05/2007


Nouvelles version CakePHP
Deux nouvelles versions de Cake voient le jour ...
Poste le : 06/04/2007


PHP 4.4.6
L'équipe de développement de PHP ...
Poste le : 01/03/2007


Sortie de PHP 5.2.1
L'équipe de développement de PHP ...
Poste le : 09/02/2007


Cake 1.1.13.4450 et 1.2.0.4451alpha
PhpNut nous l'annonce aujourd'hui, les versions...
Poste le : 05/02/2007


Liens