Ils permettent de vous fournir la meilleur expérience visiteur possible.
En poursuivant la navigation sur ce site, vous acceptez l'utilisation de ces cookies.
Le back-end d'October implémente la structure MVC. Les contrôleurs gèrent les pages et intègres des fonctionnalités tels que l'affichage de listes et de formulaires. Cet article décrit comment développer des contrôleurs back-end et configurer des comportements.
Chaque contrôleur est représenté par un script PHP établi dans le sous-dossier controllers
d'un dossier de plugin.
Les vues d'un contrôleur sont des fichiers avec l'extension .htm
contenu dans le dossier views
du contrôleur.
Ce dossier peut aussi contenir certains fichiers de configuration. Un exemple de la structure du dossier d'un contrôleur :
plugins/
acme/
blog/
controllers/
users/ <=== Dossier des vues du contrôleur
_partial.htm <=== Fichier de partiel du contrôleur
config_form.yaml <=== Fichier de configuration du contrôleur
index.htm <=== Fichier d'une vue du contrôleur
Users.php <=== Class du contrôleur
Plugin.php
La class d'un contrôleur doit étendre la class \Backend\Classes\Controller
.
Comme toutes les autres class du plugin, celle du contrôleur doit résider dans le même namespace que celui du plugin. La représentation la plus simple d'un contrôleur utilisé à l'intérieur d'un Plugin ressemble à ça :
namespace Acme\Blog\Controllers;
class Posts extends \Backend\Classes\Controller {
public function index() // <=== Méthode d'une action
{
}
}
Habituellement, chaque contrôleur définis les fonctionnalités pour ne travailler qu'avec un seul type de données - comme les articles de blog ou les catégories. Tous les comportements décrits ci-dessous suivent cette convention.
La class de base d'un contrôleur back-end définie un certain nombre de propriétés qui permette de configurer l'apparence de la page et de gérer sa sécurité :
Property | Description |
---|---|
$fatalError | Permet de stocker une erreur fatale qui serais affichée dans la vue dans le cas où une erreur surviendrais lors d'une action. |
$user | Contiens les informations sous forme d'objet de l'utilisateur actuellement connecté. |
$suppressView | Permet de prévenir l'affichage d'une vue. Peut être modifié depuis une action du contrôleur ou son constructeur. |
$params | Un tableau des paramètres du système de routage. |
$action | Le nom de la méthode de l'action en cours d'exécution. |
$publicActions | Défini un tableau des actions possibles par un utilisateur non-connecté. Peut être sur-écrit dans la définition de la class. |
$requiredPermissions | Autorisations requises pour voir cette page. Peut être configuré depuis la définition de class ou le constructeur. Voir Utilisateurs et permissions pour les détails. |
$pageTitle | Défini le titre de la page. Peut être renseigné depuis la méthode du contrôleur. |
$bodyClass | Class CSS appliquée sur la balise body utilisée pour modifier l'apparence de la page. Peut être modifié depuis une action du contrôleur ou son constructeur. |
$guarded | Défini un tableau des méthodes qui ne peuvent pas être appelées en tant qu'action. Peut être étendu depuis le constructeur. |
$layout | Défini un layout customisé à utiliser par les vues du contrôleur (voir maquettes ci-dessous). |
Les méthodes publiques du contrôleur, appelée actions sont jumelées
avec leur fichiers de vue qui représente la page correspondante à l'action.
Les fichiers de vue back-end utilise la syntaxe PHP.
Exemple de contenu d'un fichier index.htm
correspondant à la méthode de l'action index :
<h1>Bonjour le monde</h1>
L'URL de cette page est construite depuis le nom de l'auteur du plugin, le nom du plugin, le nom du contrôleur et enfin le nom de l'action :
backend/[nom de l'auteur]/[nom du plugin]/[nom du contrôleur]/[nom de l'action]
Ce qui résulte à l'adresse URL suivante :
http://example.com/backend/acme/blog/utilisateurs/index
Utiliser la propriété du contrôleur $vars
pour passer des données directement à la vue :
$this->vars['maVariable'] = 'valeur';
Les variables passées avec la propriété $vars
peuvent désormais être affichées directement dans la vue :
<p>La valeur de la variable maVariable est <?= $maVariable ?></p>
Les plugins peuvent enregistrer dans le backend des menus et sous-menus dans le fichier d'enregistrement du plugin.
Le contexte de navigation défini quel menu et sous-menu sont actifs pour la page actuelle.
Vous pouvez le définir à l'aide de la class BackendMenu
:
BackendMenu::setContext('Acme.Blog', 'blog', 'categories');
Le premier paramètre définir les noms de l'auteur et du plugin.
Le second défini le code du menu.
Et le troisième - optionnel - défini le code du sous-menu.
Habituellement, vous appellerez la méthode BackendMenu::setContext
depuis le constructeur du contrôleur.
namespace Acme\Blog\Controllers;
class Categories extends \Backend\Classes\Controller {
public function __construct()
{
parent::__construct();
BackendMenu::setContext('Acme.Blog', 'blog', 'categories');
}
Vous pouvez définir le titre d'une page back-end avec la propriété $pageTitle
du la class du contrôleur
(A noter que les comportements natifs formulaire et liste peuvent le faire pour vous) :
$this->pageTitle = 'Catégories du blog';
Le framework AJAX utilisé en back-end intègre la même librairie AJAX que sur les pages front-end. La librairie est chargée automatiquement dans le back-end
Les gestionnaires AJAX back-end peuvent être défini dans la class du contrôleur ou dans un les widgets.
Dans la class du contrôleur, les gestionnaires AJAX sont déifnis comme des méthodes publiques
dont le nom est précédé de la chaîne de caractères on
: onCreerUnDevis, onCreerUneFacture, etc.
Les gestionnaires AJAX back-end peuvent retourner un tableau de données, émettre des erreurs ou rediriger vers une autre page (voir Les gestionnaires d'évènement AJAX).
Vous pouvez utiliser $this->vars
pour définir des données
et la méthode makePartial
du contrôleur pour générer un partiel
et retourner son contenu en tant que donnée de la réponse
public function onCreerUnDevis()
{
if (Request::input('uneVariable') != 'uneValeur') {
throw new ApplicationException('Valeur incorrecte');
}
$this->vars['foo'] = 'bar';
return [
'contenuPartiel' => $this->makePartial('un-partiel')
];
}
Les requêtes AJAX peuvent être émises avec l'API des attributs de données ou l'API JavaScript
Se référer à la librairie AJAX pour les détails. L'exemple suivant montre comment émettre une requête avec un bouton dans le back-end.
<button
type="button"
data-request="onCreerUnDevis"
class="btn btn-default">
Sauvegarder le devis
</button>
Remarque : Vous pouvez viser précisément le gestionnaire AJAX d'un widget grâce au prefix
widget::onAction
. Voir l'article sur les gestionnaires AJAX des widgets pour plus de précisions.
Vous pouvez définir un middleware dans vos contrôleurs back-end, ce qui vous fournis une mécanique simple pour effectuer des changements de la réponse HTTP à la requête. Par exemple, vous pourriez vouloir spécifier un header HTTP pour certaines actions dans votre contrôleur, ou rediriger l'utilisateur s'il ne répond pas à certains critères.
Les middlewares du contrôleur sont exécutés après que la requête ait été acceptée par October CMS mais avant qu'elle ne soit retournée au navigateur.
Pour définir un middleware dans votre contrôleur, vous pouvez le spécifier dans son constructeur en appelant la méthode middleware()
.
public function __construct()
{
parent::__construct();
$this->middleware(function ($requete, $reponse) {
// Fonctionnalité du middleware
});
}
La méthode middleware()
requiert un callback avec deux arguments,
$requete
fournissant les informations de la requête
et $reponse
fournissant l'objet de la réponse.
Le callback doit retourner l'objet $reponse
avec vos modifications.
Par exemple, pour ajouter un header Header-test
à votre réponse, vous pourriez faire comme-ceci :
public function __construct()
{
parent::__construct();
$this->middleware(function ($requete, $reponse) {
$reponse->headers->set('Header-test', 'Test');
return $reponse;
});
}
Vous pouvez aussi contrôler quelle action utiliser votre middleware à l'aide des modificateurs only()
et except()
.
Par exemple, pour restreindre le middleware à n'être utilisé
que lorsque la méthode index
est appelée, vous pourriez faire comme-ceci :
public function __construct()
{
parent::__construct();
$this->middleware(function ($requete, $reponse) {
// Fonctionnalité du middleware
})->only('index');
}
Ou au contraire, vous pouvez définir que le middleware sera utilisé partout, sauf sur l'action index :
public function __construct()
{
parent::__construct();
$this->middleware(function ($requete, $reponse) {
// Fonctionnalité du middleware
})->except('index');
}
Nous sommes désolés, mais cette partie de la documentation n'est pas encore traduite.
Les liens vers les parties encore non-traduites sont mentionnés par la mention [en] au dessus d'eux.
Retrouvez la page concernée sur la documentation officielle.
Ils permettent de vous fournir la meilleur expérience visiteur possible.
En poursuivant la navigation sur ce site, vous acceptez l'utilisation de ces cookies.