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 :

../_images/speControllerBtn.png
Remplissez ensuite le formulaire :
  • Entrez le nom du contrôleur

  • Sélectionnez le modèle associé

  • Cliquez ensuite sur le bouton de validation

../_images/createCrudForm1.png

Description des caractéristiques

Le contrôleur généré :

app/controllers/Products.php
 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 :

../_images/getBtn.png

Lecture (action index)

../_images/usersControllerIndex1.png

En cliquant sur une ligne de la dataTable (instance), on affiche les objets associés à l’instance (action details) :

../_images/usersControllerIndex1-details.png

Utilisation de la zone de recherche :

../_images/usersControllerSearch1.png

Création (action newModel)

Il est possible de créer une instance en cliquant sur le bouton « add ».

../_images/addNewModelBtn.png

Le formulaire par défaut pour ajouter une instance de User :

../_images/usersControllerNew1.png

Mise à jour (action update)

Le bouton d’édition sur chaque ligne vous permet d’éditer une instance.

../_images/editModelBtn.png

Le formulaire par défaut pour ajouter une instance de User :

../_images/usersControllerEdit1.png

Suppression (action delete)

Le bouton de suppression sur chaque ligne vous permet de supprimer une instance.

../_images/deleteModelBtn.png

Affichage du message de confirmation avant la suppression :

../_images/usersControllerDelete1.png

Personnalisation

Créez à nouveau un ResourceCrudController à partir de l’interface d’administration :

../_images/createCrudForm2.png

Il est désormais possible de personnaliser le module en utilisant la surdéfinition.

Aperçu

../_images/crud-schema.png

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.

/refresh_

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
../_images/template_index.png
form.html

Affiché dans le bloc frm

../_images/template_form.png
display.html

Affiché dans le bloc frm

../_images/template_display.png

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 :

../_images/speControllerBtn.png
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

../_images/createIndexCrudForm1.png

Description des caractéristiques

Le contrôleur généré :

app/controllers/CrudIndex.php
 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 :

../_images/indexCrudController.png

Personnalisation

Créez à nouveau un MultiResourceCrudController à partir de l’interface d’administration :

../_images/createIndexCrudForm2.png

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.