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:
- 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
Descripción de las características
El controlador generado:
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:
Read (acción índice)
Al hacer clic en una fila de la dataTable (instance) se muestran los objetos asociados a la instancia (acción details):
Utilizar el área de búsqueda:
Create (acción newModel)
Es posible crear una instancia pulsando el botón añadir
El formulario por defecto para añadir una instancia de Usuario:
Update (acción de actualización)
El botón de edición de cada fila permite editar una instancia
El formulario por defecto para añadir una instancia de Usuario:
Delete (acción eliminar)
El botón de eliminación de cada fila permite editar una instancia
Visualización del mensaje de confirmación antes de la eliminación:
Personalización
Cree de nuevo un ResourceCrudController desde la interfaz de administración:
Ahora es posible personalizar el módulo utilizando overriding.
Visión general
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 |
||
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
form.html
Se muestra en el bloque frm
display.html
Se muestra en el bloque frm
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:
- 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
Descripción de las características
El controlador generado:
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:
Personalización
Crea de nuevo un MultiResourceCrudController desde la interfaz de administración:
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 |
||
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
.