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
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.
Retourne le nombre d'erreurs générées par un save échoué.
Valide les données du modèle associé. Pour plus d'informations, voir le chapitre "validations".
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
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.
Méthode appelée avant l'appel à l'action en cours.
Méthode appelée après l'appel à l'action en cours.
Méthode appelée juste avant l'appel à la vue.
Autres fonctions utiles
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.
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 :
PHP4 supporte mal la récupération automatique du nom du contrôleur. Définissez le ici manuellement si vous rencontrez des problèmes.
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')
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')
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
Si vous définissez cette variable à false, la vue ne sera pas appelée.
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
}
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.
contient le contenu de vos formulaires respectant les règles de nommage. Plus simplement, elle contient le contenu de POST['data']
Contient les variables passées à la page avec la méthode POST ou FILES.
Contient 1 si le layout actuel est 'bare'; 0 sinon.
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'.
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.
Contient le contenu des variables passées à la page avec la méthode GET, sous la forme d'un tableau.