TSLAppDefaultCRUDController
extends TSLAppDefaultController
in
Controlador sugerido como default para las aplicaciones tipo CRUD las cuales tiene operaciones de fetch,read,update y delete.
Por default , todos los input parametros que sean pasados por parseParameters seran procesados de tal forma que los 'null' se conviertan en reales NULL.
Siempre usaran un unico via de salida el cual esta preparado para responder a ajax calls.
Los response y constraint processor seran cargados dinamicamente a partir de los parametros libid (que libreria se esta usando) y filterformat (XML,json,etc)
El setup se hace a traves del arreglo setupOpts y debe ser realizado en la funcion setupData llamada durante la inicializacion de la clase. Por Ejemplo de dicho arreglo:
$this->setupOpts = [ "validateOptions" => [ "fetch" => [], "read" => ["langId" => 'empresa', "validationId" => 'empresa_validation', "validationGroupId" => 'v_empresa', "validationRulesId" => 'getEmpresa'], "add" => ["langId" => 'empresa', "validationId" => 'empresa_validation', "validationGroupId" => 'v_empresa', "validationRulesId" => 'addEmpresa'], "del" => ["langId" => 'empresa', "validationId" => 'empresa_validation', "validationGroupId" => 'v_empresa', "validationRulesId" => 'delEmpresa'], "upd" => ["langId" => 'empresa', "validationId" => 'empresa_validation', "validationGroupId" => 'v_empresa', "validationRulesId" => 'updEmpresa'] ], "paramsList" => [ "fetch" => [], "read" => ['empresa_id', 'verifyExist'], "add" => ['empresa_razon_social', 'tipo_empresa_codigo','empresa_ruc', 'empresa_direccion', 'empresa_telefonos', 'empresa_fax', 'empresa_correo', 'activo'], "del" => ['empresa_id', 'versionId'], "upd" => ['empresa_id', 'empresa_razon_social', 'tipo_empresa_codigo', 'empresa_ruc', 'empresa_direccion', 'empresa_telefonos', 'empresa_fax', 'empresa_correo', 'versionId', 'activo'], ], "paramsFixableToNull" => ['empresa_','tipo_empresa_'] "paramsFixableToValue" => ["empresa_id" => ["valueToFix" => 'null', "valueToReplace" => NULL, "isID" => true]], "paramToMapId" => 'empresa_id' ];
Donde:
validateOptions
Arreglo con la lista de valores requeridos para la validacion de cada operacion, el lenguaje,id de validacion, etc,
las operaciones soportadas son fetch,add,del,read,del,upd
paramsList
Arreglo con la lista de parametros que utilizara el controller y pasara al DTO para luego armar el modelo requerido para la operacion.
paramsFixableToNull
Arreglo con la lista de parametros o patron de lista de parametros que se verificaran si deben cambiarse de 'null' a NULL
Este arreglo puede contener un nombre parcial que identifique a un grupo de parametros , por ejemplo :
usuarios quiere decir todo parametro que empiece con usuarios tales como usuarios_id,usuarios_nombre, etc
o puede contener nombres exactos.
paramsFixableToValue
Arreglo con la lista de parametros que deben ser mapeados de valor.
paramToMapId
Define que parametro sera colocado como id para el caso de la lectura de un registro.
por ejemplo usuarios_id representa el id de busqueda , en este caso este sera colocado como el id
para buscar el registro a leer.
*
Table of Contents
$setupOpts | Debe ser inicializada durante el metodo setupData() | array |
---|---|---|
$DTO | El Data transfer Object | TSLIDataTransferObj |
$responseProcessor | Instancia del encoder que procesara los datos resultados obtenidos en el DTO y los transformara al formato requerido por la vista de salida, por ejemplo JSON, XML. | TSLIResponseProcessor |
$DEBUG | Si envia mensajes de debug o no. | bool |
__construct() | Constructor , este invocara el metodo setupData el cual debera ser implementado para inicializar el arreglo $setupOpts. | mixed |
getBussinessService() | Debe retornar la instancia del bussines service que usara este controlador. | TSLAppCRUDBussinessService |
setupData() | Funcion que debe inicializar y setear los datos en $this->setupOpts Las clases que implementan deberan hacerlo para que todo funcione. | void |
preExecuteOperation() | Por default este metodo no hace nada , las clases que requieran deberan hacer el override. | void |
executeCrudOperation() | Metodo donde se ejecuta el proceso default del controller de acuerdo a la operacion solicitada. | void |
index() | Pagina index para este controlador , maneja todos los casos , lectura, lista etc. | mixed |
__construct() | TSLBaseController constructor. | mixed |
parseParameters() | Funcion de apoyo para eliminar los parametros que llegan con el valor 'null' en texto ya que sera asumido como texto y no un real NULL en la capa de persistencia , de tal forma que en esos casos se asignara un real NULL al parametro, previo a su proceso posterior. | void |
getView() | Retornara el nombre de la vista , realmente debera corresponder a la clase que implementa la vista de salida, estas vistas seran buscadas en el directorio views de la aplicacion. | string |
getResponseProcessor() | Retornara la instancia del response processor para crear la salida adecuada a la vista , por ejemplo podria ser para JSON,XML u otro cualquiera. | TSLIResponseProcessor |
getDefaultFilterType() | Define el tipo de parser default para el filtro el cual puede ser json,csv o xml. | string |
getDefaultSorterType() | Define el tipo de parser default para los campos de sort el cual puede ser json,csv o xml. | string |
getFilterProcessor() | Metodo hook que se usara si se desea utilizar por default un procesador de filtro diferente al default. | null|TSLIInputProcessor |
getSorterProcessor() | Metodo hook que se usara si se desea utilizar por default un procesador de campos de sort diferente al default. | null|TSLIInputProcessor |
getConstraintProcessor() | Cargara por default el constraint processor que el usuario haya definido para el tipo que se indique y de no indicarse el tipo buscara el default que para este caso es el de JSON. | TSLIInputProcessor |
getUserCode() | La implementacion default buscara en la sesion la llave "usuario_code". | string |
getUserId() | La implementacion default buscara en la sesion la llave "usuario_id". | int |
isLoggedIn() | La implementacion default buscara en la sesion la llave "isLoggedIn" y de existir indicara que el usuario esta logeado. | bool |
getSessionData() | Retorna el valor de un dato de sesion en base a una llave. | mixed |
setUserCode() | Setea el codigo del usuario logeado , este valor tendra sentido ser seteado si isLoggedIn esta seteado. | void |
setUserId() | Setea el id del usuario logeado , este valor tendra sentido ser seteado si isLoggedIn esta seteado. | void |
setLoggedIn() | Setea si el usuario esta logeado o no al sistema. | void |
setSessionData() | Guarda un valor en la sesion. | void |
unsetSessionData() | Remueve un valor en la sesion. | void |
MyShutdown() | Funcion callback al terminar el ciclo del controller en el cual se detectaran si hubo errores inesperados para ser colocados como parte de la salida. | mixed |
myErrorHandler() | Funcion callback del sistema para en caso sucedan errores no controlados, colocara el mensaje de error como parte de la salida. | mixed |
MyExceptionHandler() | Funcion callback en el caso de excepciones no controladas. | mixed |
fixParameter() | Reemplaza el valor de un parametro por el enviado en el caso se cumpla la condicion de igualdad con el valueToSearch. | mixed |
validateInputData() | Validara los parametros que vienen enviados desde el cliente (browser) y el resultado de dicha validacion sera colocado en el out message que es parte del DTO. | bool |
getUserResponseProcessor() | Override si se usa un response especifico en algun caso y que no se cargue el default. | string |
Properties
$setupOpts
Debe ser inicializada durante el metodo setupData()
protected
array
$setupOpts
$DTO
El Data transfer Object
protected
TSLIDataTransferObj
$DTO
$responseProcessor
Instancia del encoder que procesara los datos resultados obtenidos en el DTO y los transformara al formato requerido por la vista de salida, por ejemplo JSON, XML.
protected
TSLIResponseProcessor
$responseProcessor
$DEBUG
Si envia mensajes de debug o no.
private
bool
$DEBUG
= \false
Methods
__construct()
Constructor , este invocara el metodo setupData el cual debera ser implementado para inicializar el arreglo $setupOpts.
public
__construct(
)
: mixed
Crea las estructuras requeridas por el DTO carga el response processor, asi mismo setea el sistema de errores del PHP tales como el metodo de shutdown y el exception handler.
Return values
mixedgetBussinessService()
Debe retornar la instancia del bussines service que usara este controlador.
protected
abstract getBussinessService(
)
: TSLAppCRUDBussinessService
Return values
TSLAppCRUDBussinessService —con la instancia del bussiness class
setupData()
Funcion que debe inicializar y setear los datos en $this->setupOpts Las clases que implementan deberan hacerlo para que todo funcione.
protected
abstract setupData(
)
: void
preExecuteOperation()
Por default este metodo no hace nada , las clases que requieran deberan hacer el override.
protected
preExecuteOperation(
$operationCode :
string
)
: void
Parameters
- $operationCode : string
con la operacion a realizar por ejemplo 'add','delete'.
executeCrudOperation()
Metodo donde se ejecuta el proceso default del controller de acuerdo a la operacion solicitada.
private
executeCrudOperation(
$operationCode :
string
)
: void
Inicia procesando la validaion , de ser correcta se procede a pasar los parametros al DTO , asi mismo si si la operacion es fetch procesa los constraints y finalmente ejecuta el bussines service.
Parameters
- $operationCode : string
las soportadas por este metodo son add,del,upd,read,fetch
index()
Pagina index para este controlador , maneja todos los casos , lectura, lista etc.
public
index(
)
: mixed
Basicamente su proceso es validar si el usuario esta logeado, de estarlo procesa los parametros , seteando los parametros a null si estan en la lista de nullables , luego pone valor a los parametros que estan en la lista de mapeados a un valor determinado, obtiene la operacion a ejecutar , prepara los datos de sesion y de acuerdo a la operacion ejecuta la operacion CRUD. La operacion se obtendra del parametro "_operationId"
Return values
mixed__construct()
TSLBaseController constructor.
public
__construct(
)
: mixed
Crea las estructuras requeridas por el DTO carga el response processor, asi mismo setea el sistema de errores del PHP tales como el metodo de shutdown y el exception handler.
Return values
mixedparseParameters()
Funcion de apoyo para eliminar los parametros que llegan con el valor 'null' en texto ya que sera asumido como texto y no un real NULL en la capa de persistencia , de tal forma que en esos casos se asignara un real NULL al parametro, previo a su proceso posterior.
protected
parseParameters(
$beginWith :
mixed
)
: void
En el caso $beginWith fuera un array entonces se chequeara para cada caso en el arreglo , esto es util cuando los parametros de entrada a chequear no tienen un solo prefijo.
Parameters
- $beginWith : mixed
getView()
Retornara el nombre de la vista , realmente debera corresponder a la clase que implementa la vista de salida, estas vistas seran buscadas en el directorio views de la aplicacion.
protected
abstract getView(
)
: string
Este subdirectorio debe estar bajo el $application_folder definido para la aplicacion.
Return values
string —con el nombre de la clase de la vista
getResponseProcessor()
Retornara la instancia del response processor para crear la salida adecuada a la vista , por ejemplo podria ser para JSON,XML u otro cualquiera.
protected
abstract getResponseProcessor(
)
: TSLIResponseProcessor
Tags
Return values
TSLIResponseProcessor —la instancia del response processor
getDefaultFilterType()
Define el tipo de parser default para el filtro el cual puede ser json,csv o xml.
public
getDefaultFilterType(
)
: string
Este sera usado tanto para el Constraint processor y el response processor.
Return values
string —por default este controlador define JSON.
getDefaultSorterType()
Define el tipo de parser default para los campos de sort el cual puede ser json,csv o xml.
public
getDefaultSorterType(
)
: string
Return values
string —por default este controlador define JSON.
getFilterProcessor()
Metodo hook que se usara si se desea utilizar por default un procesador de filtro diferente al default.
public
getFilterProcessor(
)
: null|TSLIInputProcessor
Si se desea uno diferente hacer override , de lo contrario retorna null , que es lo mismo que indicar usese el default.
Return values
null|TSLIInputProcessor —: \TSLIInputProcessor con la instancia del filter processor
getSorterProcessor()
Metodo hook que se usara si se desea utilizar por default un procesador de campos de sort diferente al default.
public
getSorterProcessor(
)
: null|TSLIInputProcessor
Si se desea uno diferente hacer override , de lo contrario retorna null , que es lo mismo que indicar usese el default.
Return values
null|TSLIInputProcessor —: \TSLIInputProcessor con la instancia del sorter processor
getConstraintProcessor()
Cargara por default el constraint processor que el usuario haya definido para el tipo que se indique y de no indicarse el tipo buscara el default que para este caso es el de JSON.
public
getConstraintProcessor(
)
: TSLIInputProcessor
El usuario de la clase debera definir el metodo getFilterProcessor para indicar el constraint processor a usar y asi mismo indicar el tipo de processor a traves de getDefaultFilterType
Es importante indicar que si en el REQUEST viene indicado el parametro "filterformat" este sera tomado sobre el indicado por getDefaultFilterType.
Tags
Return values
TSLIInputProcessor —instancia de un constraint processor
getUserCode()
La implementacion default buscara en la sesion la llave "usuario_code".
public
getUserCode(
)
: string
Return values
string —con el codigo del usuario conectado a la session o null de no existir ninguno.
getUserId()
La implementacion default buscara en la sesion la llave "usuario_id".
public
getUserId(
)
: int
Return values
int —con el id del usuario logeado o -1 de no haber alguno.
isLoggedIn()
La implementacion default buscara en la sesion la llave "isLoggedIn" y de existir indicara que el usuario esta logeado.
public
isLoggedIn(
)
: bool
Return values
bool —true si el usuario esta logeado al sistema.
getSessionData()
Retorna el valor de un dato de sesion en base a una llave.
public
getSessionData(
$name :
string
)
: mixed
Parameters
- $name : string
con el nombre llave del dato a buscar en la sesion.
Tags
Return values
mixed —retorna el datro guardado en la sesion
setUserCode()
Setea el codigo del usuario logeado , este valor tendra sentido ser seteado si isLoggedIn esta seteado.
public
setUserCode(
$userCode :
string
)
: void
Parameters
- $userCode : string
con el codigo del usuario a logearse.
Tags
setUserId()
Setea el id del usuario logeado , este valor tendra sentido ser seteado si isLoggedIn esta seteado.
public
setUserId(
$userId :
int
)
: void
Parameters
- $userId : int
con el id del usario logeado.
Tags
setLoggedIn()
Setea si el usuario esta logeado o no al sistema.
public
setLoggedIn(
$isLoggedIn :
bool
)
: void
Parameters
- $isLoggedIn : bool
true si el usuario esta logeado.
Tags
setSessionData()
Guarda un valor en la sesion.
public
setSessionData(
$name :
string
, $data :
mixed
)
: void
Parameters
- $name : string
con la llave del dato a agregar a la sesion.
- $data : mixed
el valor a guardar en la sesion
Tags
unsetSessionData()
Remueve un valor en la sesion.
public
unsetSessionData(
$name :
string
)
: void
Parameters
- $name : string
con la llave del dato a remover a la sesion.
Tags
MyShutdown()
Funcion callback al terminar el ciclo del controller en el cual se detectaran si hubo errores inesperados para ser colocados como parte de la salida.
public
MyShutdown(
)
: mixed
Return values
mixedmyErrorHandler()
Funcion callback del sistema para en caso sucedan errores no controlados, colocara el mensaje de error como parte de la salida.
public
myErrorHandler(
$errno :
int
, $errstr :
string
, $errfile :
string
, $errline :
int
)
: mixed
Parameters
- $errno : int
- $errstr : string
- $errfile : string
- $errline : int
Return values
mixedMyExceptionHandler()
Funcion callback en el caso de excepciones no controladas.
public
MyExceptionHandler(
$exception :
Throwable
)
: mixed
Parameters
- $exception : Throwable
Return values
mixedfixParameter()
Reemplaza el valor de un parametro por el enviado en el caso se cumpla la condicion de igualdad con el valueToSearch.
protected
fixParameter(
$parameterName :
string
, $valueToSearch :
string
, $valueToReplace :
mixed
)
: mixed
Util por ejemplo si el lado cliente envia el string 'null' para indicar campo vacio y deseamos reemplazarlo por ejemplo con un NULL real.
Parameters
- $parameterName : string
Nombre del parametro de entrada a trabajar
- $valueToSearch : string
valor a buscar
- $valueToReplace : mixed
valos por el cual reemplazar
Return values
mixed —con el valor del parametro modificado o NULL si el parametro no existe.
validateInputData()
Validara los parametros que vienen enviados desde el cliente (browser) y el resultado de dicha validacion sera colocado en el out message que es parte del DTO.
protected
final validateInputData(
$DTO :
TSLIDataTransferObj
, $langId :
string
, $validationId :
string
, $validationGroupId :
string
, $validationRulesId :
string
)
: bool
Como ejemplo de un archivo de validacion :
$config['v_colorclass'] = array( 'getColorClass' => array( array( 'field' => 'color_class_codigo', 'label' => 'lang:color_class_codigo', 'rules' => 'required|alpha_dash|max_length[20]' ) ), 'updColorClass' => array( array( 'field' => 'color_class_codigo', 'label' => 'lang:color_class_codigo', 'rules' => 'required|alpha_dash|max_length[20]' ), array( 'field' => 'color_class_value', 'label' => 'lang:color_class_value', 'rules' => 'required|max_length[7]' ), array( 'field' => 'color_class_protected', 'label' => 'lang:color_class_protected', 'rules' => 'required|is_boolean' ), array( 'field' => 'versionId', 'label' => 'lang:versionId', 'rules' => 'required|integer' ) ), 'delColorClass' => array( array( 'field' => 'color_class_codigo', 'label' => 'lang:color_class_codigo', 'rules' => 'required|alpha_dash|max_length[20]' ), array( 'field' => 'versionId', 'label' => 'lang:versionId', 'rules' => 'required|integer' ) ), 'addColorClass' => array( array( 'field' => 'color_class_codigo', 'label' => 'lang:color_class_codigo', 'rules' => 'required|alpha_dash|max_length[20]' ), array( 'field' => 'color_class_value', 'label' => 'lang:color_class_value', 'rules' => 'required|max_length[7]' ), array( 'field' => 'color_class_protected', 'label' => 'lang:color_class_protected', 'rules' => 'required|is_boolean' ) ) );
y su respectivo archivo de lenguaje, donde estaran los nombres de los campos en el idioma que se este usando, como minimo seria asi en este ejemplo:
$lang['color_class_codigo'] = 'Codigo'; $lang['color_class_value'] = 'Valor'; $lang['color_class_protected'] = 'Protegido'; $lang['versionId'] = 'Version';
Parameters
- $DTO : TSLIDataTransferObj
DTO donde residiran las respuestas a la validacion en caso exista errores y especificamente iran en el out message del mismo.
- $langId : string
Nombre base del archivo que contendra las traducciones para los mensajes de error de validaciones de campos , pej. factura , hara que el framework busque el archivo factura_lang. Este archivo debe ir en el directorio application/language/[idioma] de la aplicacion.
- $validationId : string
Nombre base del archivo que contendra las validaciones, pej. factura , hara que el framework busque el archivo facturavalidation Este archivo debe ir en el directorio application/config de la aplicacion. Para ver como se configura {@see https://codeigniter.com/userguide3/libraries/form_validation.html#overview}
- $validationGroupId : string
Un archivo de validacion puede contener varios grupos, este parametro indicara el grupo.
- $validationRulesId : string
Dentro de cada grupo habra u set de reglas para distintos casos como pueden ser una para agregar , eliminar, etc.
Return values
bool —TRUE si las validaciones fueron correctas y FALSE si no lo fueron, en este caso en el out message del DTO iran los mensajes de error de las validaciones para cada campo validado con error.
getUserResponseProcessor()
Override si se usa un response especifico en algun caso y que no se cargue el default.
protected
getUserResponseProcessor(
)
: string
Return values
string —con el nombre del procesador de salida definida por el usuario , de ser null se aplicara los metodos default de carga de dichas clases.