Contrôleurs CRUD
- Les contrôleurs CRUD vous permettent d’effectuer des opérations de base sur une classe Modèle :
Create
Read
Update
Delete
…
Note
Depuis la version 2.4.6, deux types de CrudController existent :
ResourceCrudController associé à un modèle
MultiResourceCRUDController, affichant un index et permettant de naviguer entre les modèles.
ResourceCrudController
Création
Dans l’interface d’administration (webtools), activez la partie Controllers, et choisissez Resource Crud controller :
- Remplissez ensuite le formulaire :
Entrez le nom du contrôleur
Sélectionnez le modèle associé
Cliquez ensuite sur le bouton de validation
Description des caractéristiques
Le contrôleur généré :
1<?php
2namespace controllers;
3
4 /**
5 * CRUD Controller UsersController
6 **/
7class UsersController extends \Ubiquity\controllers\crud\CRUDController{
8
9 public function __construct(){
10 parent::__construct();
11 $this->model= models\User::class;
12 }
13
14 public function _getBaseRoute():string {
15 return 'UsersController';
16 }
17}
Testez le contrôleur créé en cliquant sur le bouton « get » devant l’action index :
Lecture (action index)
En cliquant sur une ligne de la dataTable (instance), on affiche les objets associés à l’instance (action details) :
Utilisation de la zone de recherche :
Création (action newModel)
Il est possible de créer une instance en cliquant sur le bouton « add ».
Le formulaire par défaut pour ajouter une instance de User :
Mise à jour (action update)
Le bouton d’édition sur chaque ligne vous permet d’éditer une instance.
Le formulaire par défaut pour ajouter une instance de User :
Suppression (action delete)
Le bouton de suppression sur chaque ligne vous permet de supprimer une instance.
Affichage du message de confirmation avant la suppression :
Personnalisation
Créez à nouveau un ResourceCrudController à partir de l’interface d’administration :
Il est désormais possible de personnaliser le module en utilisant la surdéfinition.
Aperçu
Surdéfinition des classes
Méthodes de ResourceCRUDController à surdéfinir
Méthode |
Signification |
Retour par défaut |
---|---|---|
routes |
||
index() |
Default page : liste de toutes les instances |
|
edit($modal= »no », $ids= » ») |
Edite une instance |
|
newModel($modal= »no ») |
Crée une instance |
|
display($modal= »no »,$ids= » ») |
Affiche une instance |
|
delete($ids) |
Supprime une instance |
|
update() |
Affiche le résultat de la mise à jour d’une instance |
|
showDetail($ids) |
Affiche les membres associés avec des clés étrangères |
|
refresh_() |
Rafraîchit la zone correspondant à la DataTable (#lv) |
|
refreshTable($id=null) |
//TO COMMENT |
Méthodes de ModelViewer à surdéfinir
Méthode |
Signification |
Retour par défaut |
---|---|---|
route index |
||
getModelDataTable($instances, $model,$totalCount,$page=1) |
Crée la dataTable et ajoute son comportement |
DataTable |
getDataTableInstance($instances,$model,$totalCount,$page=1) |
Crée la dataTable |
DataTable |
recordsPerPage($model,$totalCount=0) |
Retourne le nombre de lignes à afficher (si null, il n’y a pas de pagination). |
null ou 6 |
getGroupByFields() |
Renvoie un tableau de membres sur lequel on peut effectuer un regroupement. |
[] |
getDataTableRowButtons() |
Retourne un tableau de boutons à afficher pour chaque ligne [« edit », »delete », »display »] |
[« edit », »delete »] |
onDataTableRowButton(HtmlButton $bt, ?string $name) |
À surdéfinir pour modifier les boutons des lignes de la table de données. |
|
getCaptions($captions, $className) |
Retourne les légendes des en-têtes de colonne |
tous les noms des membres |
route detail |
||
showDetailsOnDataTableClick() |
À remplacer pour s’assurer que le détail d’un objet cliqué est affiché ou non. |
true |
onDisplayFkElementListDetails($element,$member,$className,$object) |
A modifier pour l’affichage de chaque élément dans un composant liste d’objets étrangers |
|
getFkHeaderElementDetails($member, $className, $object) |
Renvoie l’en-tête d’un objet étranger (issue de ManyToOne) |
HtmlHeader |
getFkElementDetails($member, $className, $object) |
Renvoie un composant permettant d’afficher un objet étranger (relation manyToOne). |
HtmlLabel |
getFkHeaderListDetails($member, $className, $list) |
Renvoie l’en-tête d’une liste d’objets étrangers (oneToMany ou ManyToMany). |
HtmlHeader |
getFkListDetails($member, $className, $list) |
Renvoie un composant liste permettant d’afficher une collection d’objets étrangers (many). |
HtmlList |
routes edit et newModel |
||
getForm($identifier, $instance) |
Renvoie le formulaire d’ajout ou de modification d’un objet |
HtmlForm |
formHasMessage() |
Détermine si le formulaire a un titre de type message |
true |
getFormModalTitle($instance) |
Renvoie le titre de la modale du formulaire |
instance class |
onFormModalButtons($btOkay, $btCancel) |
Hook pour modifier les boutons modaux |
|
getFormTitle($form,$instance) |
Renvoie un tableau associatif définissant le titre du message du formulaire avec les clés « icon », « message », « subMessage ». |
HtmlForm |
setFormFieldsComponent(DataForm $form,$fieldTypes) |
Définit le composant pour chaque champ |
|
onGenerateFormField($field) |
Pour faire quelque chose lorsque $field est généré dans le formulaire |
|
isModal($objects, $model) |
Condition pour déterminer si le formulaire de modification ou d’ajout est modal pour les objets $model |
count($objects)>5 |
getFormCaptions($captions, $className, $instance) |
Renvoie les légendes des champs de formulaire |
tous les noms des membres |
route display |
||
getModelDataElement($instance,$model,$modal) |
Renvoie un objet DataElement pour l’affichage de l’instance. |
DataElement |
getElementCaptions($captions, $className, $instance) |
Renvoie les légendes des champs du DataElement |
tous les noms des membres |
route delete |
||
onConfirmButtons(HtmlButton $confirmBtn,HtmlButton $cancelBtn) |
A surdéfinir pour modifier les boutons de confirmation de suppression |
Méthodes CRUDDatas à surdéfinir
Méthode |
Signification |
Retour par défaut |
---|---|---|
route index |
||
_getInstancesFilter($model) |
Ajoute une condition pour filtrer les instances affichées dans dataTable |
1=1 |
getFieldNames($model) |
Retourne les champs à afficher dans l’action index pour $model |
tous les noms des membres |
getSearchFieldNames($model) |
Renvoie les champs à utiliser dans les requêtes de recherche. |
tous les noms des membres |
routes edit et newModel |
||
getFormFieldNames($model,$instance) |
Renvoie les champs à mettre à jour dans les actions edit et newModel pour $model. |
tous les noms des membres |
getManyToOneDatas($fkClass,$instance,$member) |
Renvoie une liste (filtrée) d’objets $fkClass à afficher dans une liste html |
toutes les instances de $fkClass |
getOneToManyDatas($fkClass,$instance,$member) |
Renvoie une liste (filtrée) d’objets $fkClass à afficher dans une liste html |
toutes les instances de $fkClass |
getManyToManyDatas($fkClass,$instance,$member) |
Renvoie une liste (filtrée) d’objets $fkClass à afficher dans une liste html |
toutes les instances de $fkClass |
route display |
||
getElementFieldNames($model) |
Retourne les champs à afficher dans l’action display pour $model |
tous les noms des membres |
Méthodes CRUDEvents à surdéfinir
Méthode |
Signification |
Retour par défaut |
---|---|---|
route index |
||
onConfDeleteMessage(CRUDMessage $message,$instance) |
Renvoie le message de confirmation affiché avant la suppression d’une instance. |
CRUDMessage |
onSuccessDeleteMessage(CRUDMessage $message,$instance) |
Renvoie le message affiché après une suppression |
CRUDMessage |
onErrorDeleteMessage(CRUDMessage $message,$instance) |
Renvoie le message affiché lorsqu’une erreur s’est produite lors de la suppression. |
CRUDMessage |
routes edit et newModel |
||
onSuccessUpdateMessage(CRUDMessage $message) |
Renvoie le message affiché lorsqu’une instance est ajoutée ou insérée. |
CRUDMessage |
onErrorUpdateMessage(CRUDMessage $message) |
Renvoie le message affiché lorsqu’une erreur s’est produite lors de la mise à jour ou de l’insertion. |
CRUDMessage |
onNewInstance(object $instance) |
Déclenché après la création d’une nouvelle instance |
|
onBeforeUpdate(object $instance, bool $isNew) |
Déclenché avant la mise à jour de l’instance |
|
Toutes les routes |
||
onNotFoundMessage(CRUDMessage $message,$ids) |
Renvoie le message affiché lorsqu’une instance n’existe pas. |
|
onDisplayElements($dataTable,$objects,$refresh) |
Déclenché après l’affichage des objets dans le dataTable |
Méthodes CRUDFiles à surdéfinir
Méthode |
Signification |
Retour par défaut |
|
---|---|---|---|
Fichiers template |
|||
getViewBaseTemplate() |
Renvoie le template de base pour toutes les actions Crud si getBaseTemplate renvoie un nom de fichier de template de base. |
@framework/crud/baseTemplate.html |
|
getViewIndex() |
Retourne le template pour la route index. |
@framework/crud/index.html |
|
getViewForm() |
Retourne le modèle pour les routes edit et newInstance. |
@framework/crud/form.html |
|
getViewDisplay() |
Retourne le modèle pour la route display. |
@framework/crud/display.html |
|
Urls |
|||
getRouteRefresh() |
Retourne la route pour rafraîchir la route index. |
||
getRouteDetails() |
Renvoie la route de la route detail, lorsque l’utilisateur clique sur une ligne du dataTable. |
/showDetail |
|
getRouteDelete() |
Retourne la route pour la suppression d’une instance. |
/delete |
|
getRouteEdit() |
Retourne la route pour éditer une instance |
/edit |
|
getRouteDisplay() |
Retourne la route pour l’affichage d’une instance |
/display |
|
getRouteRefreshTable() |
Renvoie la route pour rafraîchir le dataTable. |
/refreshTable |
|
getDetailClickURL($model) |
Retourne la route associée à une instance de clé étrangère dans la liste |
« « |
Structure des templates Twig
index.html
form.html
Affiché dans le bloc frm
display.html
Affiché dans le bloc frm
MultiResourceCrudController
Note
MultiResourceCRUDController affiche un index permettant de naviguer entre les CRUDs des modèles.
Création
Dans l’interface d’administration (webtools), activez la partie Controllers, et choisissez Index Crud controller :
- Remplissez ensuite le formulaire :
Entrez le nom du contrôleur
Le chemin de la route (qui doit contenir la partie variable {resource})
Cliquez ensuite sur le bouton de validation
Description des caractéristiques
Le contrôleur généré :
1<?php
2namespace controllers;
3use Ubiquity\attributes\items\router\Route;
4
5#[Route(path: "/{resource}/crud",inherited: true,automated: true)]
6class CrudIndex extends \Ubiquity\controllers\crud\MultiResourceCRUDController{
7
8 #[Route(name: "crud.index",priority: -1)]
9 public function index() {
10 parent::index();
11 }
12
13 #[Route(path: "#//home/crud",name: "crud.home",priority: 100)]
14 public function home(){
15 parent::home();
16 }
17
18 protected function getIndexType():array {
19 return ['four link cards','card'];
20 }
21
22 public function _getBaseRoute():string {
23 return "/".$this->resource."/crud";
24 }
25
26}
Testez le contrôleur créé à l’url /home/crud :
Personnalisation
Créez à nouveau un MultiResourceCrudController à partir de l’interface d’administration :
Il est maintenant possible de personnaliser le module en utilisant la surdéfinition comme pour les ResourceCRUDControllers.
Classes spécifiques à surdéfinir
Méthodes de MultiResourceCRUDController à surdéfinir
Méthode |
Signification |
Retour par défaut |
---|---|---|
routes |
||
home () |
Page d’accueil : liste des modèles |
|
Toutes les routes de « CRUDController ». |
||
Evènements |
||
onRenderView(array &$data) |
Avant le rendu de la page d’accueil |
|
Configuration |
||
hasNavigation() |
Renvoie la valeur True pour l’affichage du menu déroulant de navigation. |
True |
getIndexModels() |
Renvoie la liste des modèles disponibles à afficher |
modèles à partir de la base de données par défaut |
getIndexModelsDetails() |
Retourne un tableau associatif (titre, icon, url) pour chaque modèle. |
[] |
getIndexDefaultIcon(string $resource) |
Renvoie l’icône d’un modèle |
Un animal au hasard |
getIndexDefaultTitle(string $resource) |
Retourne le titre d’un modèle |
Le nom de la ressource |
getIndexDefaultDesc(string $modelClass) |
Renvoie la description d’un modèle |
Le nom complet de la classe |
getIndexDefaultUrl(string $resource) |
Retourne l’url associée à un modèle |
Le chemin de la route |
getIndexDefaultMeta(string $modelClass) |
Retourne la partie méta pour un modèle |
|
getIndexType() |
Définit les classes css du composant de l’index |
cards |
getModelName() |
Renvoie le nom complet du modèle pour $this->resource |
A partir du NS par défaut des modèles |
Méthodes CRUDFiles à surdéfinir
Méthode |
Signification |
Retour par défaut |
|
---|---|---|---|
Fichiers template |
|||
getViewHome() |
Retourne le template de base pour la vue d’accueil |
@framework/crud/home.html |
|
getViewItemHome() |
Renvoie le template d’un élément de la route home. |
@framework/crud/itemHome.html |
|
getViewNav() |
Renvoie le template pour l’affichage des modèles dans une liste déroulante. |
@framework/crud/nav.html |
Note
Toutes les autres méthodes des classes CRUDController
, CRUDFiles
, CRUDEvents
et CRUDDatas
peuvent être surdéfinies comme pour le ResourceCRUDController
.