Espacio Daycry - Espacio de programación

  • Inicio
  • Categorias
    • - Codeigniter
    • - Symfony
    • - HTML5
    • - Linux / Ubuntu
    • - PHP
    • - Jquery
  • PortFolio - Proyectos Codeiniter
    • - Encuestas Online
    • - Estadísticas - GLPI
    • - Gestión de colas
    • - Web Service - REST

miércoles, 3 de febrero de 2016

Codeigniter - Hook de Validación por comentarios

Posted by daycry at 14:11 Labels: anotaciones , Codeigniter , PHP , validación


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
 }
}
Tweet

Related Posts

  • Paginación Codeigniter
    Paginación Codeigniter
  • Controllers( II ) - Codeigniter - Framework
    Controllers( II ) - Codeigniter - Framework
  • Controllers - Codeigniter - Framework
    Controllers - Codeigniter - Framework
  • Framework Codeigniter
    Framework Codeigniter

No hay comentarios :

Publicar un comentario

Entrada más reciente Entrada antigua Inicio
Suscribirse a: Enviar comentarios ( Atom )

Sígueme en las Redes Sociales



Follow @daycry9



Donaciones

Suscribirse a

Entradas
Atom
Entradas
Comentarios
Atom
Comentarios

Datos personales

daycry
Ver todo mi perfil

Entradas populares

  • Crear archivos PHP ejecutables por terminal UBUNTU
    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...
  • Pâginación PHP con Librería Zebra Pagination
    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...
  • PHPExcel - Codeigniter
    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...
  • PHP- Operaciones con fechas - Sumar Horas, minutos y segundos
    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 ...
  • Codeigniter - Múltiples conexiones a base de datos
    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