Controladores CRUD

Los controladores CRUD permiten realizar operaciones básicas sobre una clase Modelo:
  • Create

  • Read

  • Update

  • Delete

Nota

Desde la versión 2.4.6, existen dos tipos de CrudController:

  • ResourceCrudController asociado a un modelo

  • MultiResourceCRUDController, mostrando un índice y permitiendo navegar entre modelos.

ResourceCrudController

Creación

En la interfaz de administración (web-tools), active la parte Controllers, y elija crear Resource Crud controller:

../_images/speControllerBtn.png
A continuación, rellene el formulario:
  • Introduzca el nombre del controlador

  • Seleccione el modelo asociado

  • A continuación, haga clic en el botón de validación

../_images/createCrudForm1.png

Descripción de las características

El controlador generado:

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}

Pruebe el controlador creado haciendo clic en el botón get situado delante de la acción index:

../_images/getBtn.png

Read (acción índice)

../_images/usersControllerIndex1.png

Al hacer clic en una fila de la dataTable (instance) se muestran los objetos asociados a la instancia (acción details):

../_images/usersControllerIndex1-details.png

Utilizar el área de búsqueda:

../_images/usersControllerSearch1.png

Create (acción newModel)

Es posible crear una instancia pulsando el botón añadir

../_images/addNewModelBtn.png

El formulario por defecto para añadir una instancia de Usuario:

../_images/usersControllerNew1.png

Update (acción de actualización)

El botón de edición de cada fila permite editar una instancia

../_images/editModelBtn.png

El formulario por defecto para añadir una instancia de Usuario:

../_images/usersControllerEdit1.png

Delete (acción eliminar)

El botón de eliminación de cada fila permite editar una instancia

../_images/deleteModelBtn.png

Visualización del mensaje de confirmación antes de la eliminación:

../_images/usersControllerDelete1.png

Personalización

Cree de nuevo un ResourceCrudController desde la interfaz de administración:

../_images/createCrudForm2.png

Ahora es posible personalizar el módulo utilizando overriding.

Visión general

../_images/crud-schema.png

Clases de anulación

Métodos de ResourceCRUDController a sustituir

Método

Significado

Retorno por defecto

rutas

index()

Página por defecto: lista de todos los objetos

edit($modal=»no», $ids=»»)

Edita una instancia

newModel($modal=»no»)

Crea una nueva instancia

display($modal=»no»,$ids=»»)

Muestra una instancia

delete($ids)

Elimina una instancia

update()

Muestra el resultado de la actualización de una instancia

showDetail($ids)

Muestra los miembros asociados con claves externas

refresh_()

Refresca el área correspondiente a la DataTable (#lv)

refreshTable($id=null)

//TO COMMENT

Métodos de ModelViewer a sustituir

Método

Significado

Retorno por defecto

ruta index

getModelDataTable($instances, $model,$totalCount,$page=1)

Crea la dataTable y añade su comportamiento

DataTable

getDataTableInstance($instances,$model,$totalCount,$page=1)

Crea la dataTable

DataTable

recordsPerPage($model,$totalCount=0)

Devuelve el recuento de filas a mostrar (si es null no hay paginación)

null or 6

getGroupByFields()

Devuelve una matriz de miembros sobre la que realizar una agrupación

[]

getDataTableRowButtons()

Devuelve un array de botones a mostrar para cada fila [«edit»,»delete»,»display»]

[«edit»,»delete»]

onDataTableRowButton(HtmlButton $bt, ?string $name)

Para modificar los botones de fila de dataTable

getCaptions($captions, $className)

Devuelve los títulos de las cabeceras de las columnas

todos los nombres de los miembros

ruta detalle

showDetailsOnDataTableClick()

Anular para asegurarse de que se muestra o no el detalle de un objeto sobre el que se ha hecho clic

true

onDisplayFkElementListDetails($element,$member,$className,$object)

Modificar para mostrar cada elemento de un componente de lista de objetos foraneos

getFkHeaderElementDetails($member, $className, $object)

Devuelve la cabecera de un único objeto foraneo (issue from ManyToOne)

HtmlHeader

getFkElementDetails($member, $className, $object)

Devuelve un componente para mostrar un único objeto foraneo (relación manyToOne)

HtmlLabel

getFkHeaderListDetails($member, $className, $list)

Devuelve la cabecera de una lista de objetos foraneos (oneToMany o ManyToMany)

HtmlHeader

getFkListDetails($member, $className, $list)

Devuelve un componente de lista para mostrar una colección de objetos foraneos (muchos)

HtmlList

rutas edit y newModel.

getForm($identifier, $instance)

Devuelve el formulario para añadir o modificar un objeto

HtmlForm

formHasMessage()

Determina si el formulario tiene un título de mensaje

true

getFormModalTitle($instance)

Devuelve el título del modal del formulario

clase de instancia

onFormModalButtons($btOkay, $btCancel)

Hook para actualizar los botones modales

getFormTitle($form,$instance)

Devuelve una matriz asociativa que define el título del mensaje de formulario con las claves «icon»,»message»,»subMessage»

HtmlForm

setFormFieldsComponent(DataForm $form,$fieldTypes)

Establece los componentes de cada campo

onGenerateFormField($field)

Para hacer algo cuando $field se genera en el formulario

isModal($objects, $model)

Condición para determinar si el formulario de edición o adición es modal para los objetos $model

count($objects)>5

getFormCaptions($captions, $className, $instance)

Devuelve las leyendas de los campos de formulario

todos los nombres de los miembros

ruta display

getModelDataElement($instance,$model,$modal)

Devuelve un objeto DataElement para mostrar la instancia

DataElement

getElementCaptions($captions, $className, $instance)

Devuelve los subtítulos de los campos DataElement

todos los nombres de los miembros

ruta delete

onConfirmButtons(HtmlButton $confirmBtn,HtmlButton $cancelBtn)

Para anular la modificación de los botones de confirmación de borrado

Métodos CRUDDatas a sustituir

Método

Significado

Retorno por defecto

ruta index

_getInstancesFilter($model)

Añade una condición para filtrar las instancias mostradas en dataTable

1=1

getFieldNames($model)

Devuelve los campos a mostrar en la acción index para $model

todos los nombres de los miembros

getSearchFieldNames($model)

Devuelve los campos que se utilizarán en las consultas de búsqueda

todos los nombres de los miembros

rutas edit y newModel.

getFormFieldNames($model,$instance)

Devuelve los campos a actualizar en las acciones edit y newModel para $model

todos los nombres de los miembros

getManyToOneDatas($fkClass,$instance,$member)

Devuelve una lista (filtrada) de objetos $fkClass para mostrar en una lista html

todas las instancias $fkClass

getOneToManyDatas($fkClass,$instance,$member)

Devuelve una lista (filtrada) de objetos $fkClass para mostrar en una lista html

todas las instancias $fkClass

getManyToManyDatas($fkClass,$instance,$member)

Devuelve una lista (filtrada) de objetos $fkClass para mostrar en una lista html

todas las instancias $fkClass

ruta display

getElementFieldNames($model)

Devuelve los campos a mostrar en la acción display para $model

todos los nombres de los miembros

Métodos CRUDEvents a sustituir

Método

Significado

Retorno por defecto

ruta index

onConfDeleteMessage(CRUDMessage $message,$instance)

Devuelve el mensaje de confirmación que aparece antes de eliminar una instancia

CRUDMessage

onSuccessDeleteMessage(CRUDMessage $message,$instance)

Devuelve el mensaje mostrado tras un borrado

CRUDMessage

onErrorDeleteMessage(CRUDMessage $message,$instance)

Devuelve el mensaje mostrado cuando se ha producido un error al borrar

CRUDMessage

rutas edit y newModel.

onSuccessUpdateMessage(CRUDMessage $message)

Devuelve el mensaje que aparece cuando se añade o inserta una instancia

CRUDMessage

onErrorUpdateMessage(CRUDMessage $message)

Devuelve el mensaje que aparece cuando se produce un error al actualizar o insertar

CRUDMessage

onNewInstance(object $instance)

Se activa tras la creación de una nueva instancia

onBeforeUpdate(object $instance, bool $isNew)

Se activa antes de la actualización de la instancia

todas las rutas

onNotFoundMessage(CRUDMessage $message,$ids)

Devuelve el mensaje que aparece cuando una instancia no existe

onDisplayElements($dataTable,$objects,$refresh)

Se activa después de mostrar objetos en dataTable

Métodos de CRUDFiles que deben sustituirse

Método

Significado

Retorno por defecto

archivos de plantilla

getViewBaseTemplate()

Devuelve la plantilla base para todas las acciones Crud si getBaseTemplate devuelve un nombre de archivo de plantilla base

@framework/crud/baseTemplate.html

getViewIndex()

Devuelve la plantilla de la ruta index.

@framework/crud/index.html

getViewForm()

Devuelve la plantilla de las rutas edit y newInstance.

@framework/crud/form.html

getViewDisplay()

Devuelve la plantilla de la ruta display.

@framework/crud/display.html

Urls

getRouteRefresh()

Devuelve la ruta para refrescar la ruta índice

/refresh_

getRouteDetails()

Devuelve la ruta para la ruta de detalle, cuando el usuario hace clic en una fila dataTable

/showDetail

getRouteDelete()

Devuelve la ruta para eliminar una instancia

/delete

getRouteEdit()

Returns the route for editing an instance

/edit

getRouteDisplay()

Devuelve la ruta para mostrar una instancia

/display

getRouteRefreshTable()

Devuelve la ruta para refrescar la dataTable

/refreshTable

getDetailClickURL($model)

Devuelve la ruta asociada a una instancia de clave externa en la lista

«»

Estructura de plantillas Twig

index.html
../_images/template_index.png
form.html

Se muestra en el bloque frm

../_images/template_form.png
display.html

Se muestra en el bloque frm

../_images/template_display.png

MultiResourceCrudController

Nota

El MultiResourceCRUDController muestra un índice que permite navegar entre los CRUDs de los modelos.

Creación

En la interfaz de administración (web-tools), active la parte Controllers, y elija crear Index Crud controller:

../_images/speControllerBtn.png
A continuación, rellene el formulario:
  • Introduzca el nombre del controlador

  • La ruta de acceso (que debe contener la parte variable {resource})

  • A continuación, haga clic en el botón de validación

../_images/createIndexCrudForm1.png

Descripción de las características

El controlador generado:

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}

Prueba el controlador creado en la url /home/crud:

../_images/indexCrudController.png

Personalización

Crea de nuevo un MultiResourceCrudController desde la interfaz de administración:

../_images/createIndexCrudForm2.png

Ahora es posible personalizar el módulo utilizando overriding como el ResourceCRUDControllers.

Clases específicas para anular

Métodos de MultiResourceCRUDController a sustituir

Método

Significado

Retorno por defecto

rutas

home ()

Página de inicio : lista de todos los modelos

Todas las rutas de CRUDController

Eventos

onRenderView(array &$data)

Antes de la presentación de la página de inicio

Configuración

hasNavegación()

Devuelve True para mostrar el menú desplegable de navegación

True

getIndexModels()

Devuelve la lista de modelos disponibles para mostrar

modelos de la base de datos por defecto

getIndexModelsDetails()

Devuelve una matriz asociativa (title, icon url) para cada modelo

[]

getIndexDefaultIcon(string $resource)

Devuelve el icono de un modelo

Un animal al azar

getIndexDefaultTitle(string $resource)

Devuelve el título de un modelo

El nombre del recurso

getIndexDefaultDesc(string $modelClass)

Devuelve la descripción de un modelo

El nombre completo de la clase

getIndexDefaultUrl(string $resource)

Devuelve la url asociada a un modelo

La ruta

getIndexDefaultMeta(string $modelClass)

Devuelve la meta de un modelo

getIndexType()

Define las clases css del componente index

tarjetas

getModelName()

Devuelve el nombre completo del modelo para $this->resource

Del modelo por defecto NS

Métodos de CRUDFiles que deben sustituirse

Método

Significado

Retorno por defecto

archivos de plantilla

getViewHome()

Devuelve la plantilla base para la vista de inicio

@framework/crud/home.html

getViewItemHome()

Devuelve la plantilla de un elemento de la ruta de inicio

@framework/crud/itemHome.html

getViewNav()

Devuelve la plantilla para mostrar modelos en un desplegable

@framework/crud/nav.html

Nota

Todos los demás métodos de las clases CRUDController, CRUDFiles, CRUDEvents y CRUDDatas pueden ser sobreescritos como en el caso de ResourceCRUDController.