miércoles, 3 de febrero de 2016
Codeigniter - Hook de Validación por comentarios
Con este ejemplo, vamos a crear una validación, simplemente utilizando comentarios con anotaciones.
Para ellos simplemente se ha de crear el siguiente hook.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Hooks
| -------------------------------------------------------------------------
| This file lets you define "hooks" to extend CI without hacking the core
| files. Please see the user guide for info:
|
| http://codeigniter.com/user_guide/general/hooks.html
|
*/
$hook['post_controller_constructor'] = function()
{
//Obtenemos la instancia
$_ci=& get_instance();
//Nombre de la clase
$class = $_ci->router->fetch_class();
//Nombre de la funcion
$function = $_ci->router->fetch_method();
//Datos reflection
$reflection = new ReflectionMethod(ucfirst($class), $function);
//Documentos en la funcion
$docs = $reflection->getDocComment();
//Para documentos en la clase use lo siguiente:
//$reflection_class = new ReflectionClass(ucfirst($class)
//$docs_class = $reflection->getDocComment();
//Filtramos por una cadena que comienze con @validate::contenido_validate
$pattern = '/@validate::([a-zA-Z0-9\_]+)/';
if( preg_match_all( $pattern, $docs, $matches) )
{
$annotations = $matches[1];
//en un arreglo tenemos el contenido de @validate::
//obtenemos la sesion si existe
$persona = ( isset( $_ci->session->userdata['persona'] ) ) ? $_ci->session->userdata['persona'] : null;
if(in_array('personanormal' , $annotations)){
if(!$persona && $persona->tipo != 'normal'){
redirect('/algunaurl/'); exit();
}
return true;
}
if(in_array('personaadmin' , $annotations)){
if(!$persona && $persona->tipo != 'admin'){
redirect('/algunaurl/'); exit();
}
return true;
}
if(in_array('personalogeada' , $annotations)){
if(!$persona){
redirect('/algunaurl/'); exit();
}
return true;
}
}
};
Y en el controlador el siguiente código:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class User extends CI_Controller {
/**
* @Validate::personanormal
*/
public function index(){
//algo normal
}
/**
* @Validate::personaadmin
*/
public function index(){
//algo admin
}
/**
* @Validate::personalogeada
*/
public function index(){
//algo persona logeada
}
}
Suscribirse a:
Enviar comentarios
(
Atom
)
Sígueme en las Redes Sociales
Donaciones
Datos personales
Entradas populares
-
En este apartado vamos a explicar como ejercutar archivos PHP a través del terminal de Ubuntu. Lo primero que tendríamos que hacer es inst...
-
En este blog voy a comentar un tema que se utilizan en casi todas las páginas web que existen, y es el tema de la paginación. La paginaci...
-
Este post trata de la integración de la librería PHPExcel en Codeigniter, aunque se podría aplicar a cualquier librería, como por ejemplo mP...
-
Ejemplo para añadir o sumar un número determinado de hora/s, minuto/s, segundo/s a una fecha en php. Con la función strtotime se puede ...
-
Este tema es uno de los temas primordiales sobre el framework Codeigniter, ya que en alguna ocación nos hemos visto obligados a recoger dato...
© Espacio Daycry - Espacio de programación 2013 . Powered by Bootstrap , Blogger templates and RWD Testing Tool

No hay comentarios :
Publicar un comentario