Diferencia entre revisiones de «Indice»

De KumbiaPHP Framework Wiki
 
(No se muestran 64 ediciones intermedias de 15 usuarios)
Línea 1: Línea 1:
 +
<big>Nuevo manual actualizado para la v1 en español e ingles en [https://github.com/KumbiaPHP/Documentation/blob/master/es/index.md Manual KumbiaPHP en Github]
 +
</big>
 +
 
Este manual esta portándose del [http://ufpr.dl.sourceforge.net/sourceforge/kumbia/Manual_Kumbia_PHP_Framework_v0-5.pdf  Manual PDF de KumbiaPHP Framework].
 
Este manual esta portándose del [http://ufpr.dl.sourceforge.net/sourceforge/kumbia/Manual_Kumbia_PHP_Framework_v0-5.pdf  Manual PDF de KumbiaPHP Framework].
  
Línea 5: Línea 8:
  
 
= [[Agradecimientos|AGRADECIMIENTOS]] =
 
= [[Agradecimientos|AGRADECIMIENTOS]] =
 
+
    Este manual es para agradecer a los que con su tiempo y apoyo en gran o en poca medida han ayudado a que este framework sea cada día mejor.
 +
    A todos ellos Gracias Totales:
 +
      Andres Felipe Gutierrez gutierrezandresfelipe@gmail.com
 +
      Deivinson Tejeda deivinsontejeda@kumbiaphp.com
 +
      Emilio Silveira emilio.rst@kumbiaphp.com
 +
      César Caballero aka Phillipo phillipo@kumbiaphp.com
 
= [[Prefacio|PREFACIO]] =
 
= [[Prefacio|PREFACIO]] =
  
Línea 40: Línea 48:
 
#[[Instalar_Kumbia#Configurar_Apache2Triad|Configurar Apache2Triad]]
 
#[[Instalar_Kumbia#Configurar_Apache2Triad|Configurar Apache2Triad]]
 
#[[Instalar_Kumbia#Verificar la instalación de Kumbia|Verificar la instalación de Kumbia]]
 
#[[Instalar_Kumbia#Verificar la instalación de Kumbia|Verificar la instalación de Kumbia]]
##[[Instalar_Kumbia#Instalar Kumbia PHP en producción de forma segura|VInstalar Kumbia PHP en producción de forma segura]]
+
##[[Instalar_Kumbia#Instalar Kumbia PHP en producción de forma segura| Instalar Kumbia PHP en producción de forma segura]]
  
 
== [[Estructura_de_Kumbia|Estructura de Kumbia]] ==
 
== [[Estructura_de_Kumbia|Estructura de Kumbia]] ==
Línea 110: Línea 118:
 
####[[MODELOS#table_exists()|table_exists()]]
 
####[[MODELOS#table_exists()|table_exists()]]
  
=[[ActiveRecord|ACTIVE RECORD]]=
+
==[[ActiveRecord|ACTIVE RECORD]]==
  
 
#[[ActiveRecord#Ventajas del ActiveRecord|Ventajas del ActiveRecord]]
 
#[[ActiveRecord#Ventajas del ActiveRecord|Ventajas del ActiveRecord]]
Línea 117: Línea 125:
 
#[[ActiveRecord#Llaves Primarias y el uso de IDs|Llaves Primarias y el uso de IDs]]
 
#[[ActiveRecord#Llaves Primarias y el uso de IDs|Llaves Primarias y el uso de IDs]]
  
==[[CRUD|CRUD: Create, Read, Update, Delete]]==
+
===[[CRUD|CRUD: Create, Read, Update, Delete]]===
  
 
#[[CRUD#Creando Registros|Creando Registros]]
 
#[[CRUD#Creando Registros|Creando Registros]]
Línea 127: Línea 135:
 
#[[CRUD#Propiedades Soportadas|Propiedades Soportadas]]
 
#[[CRUD#Propiedades Soportadas|Propiedades Soportadas]]
  
==[[Convenciones en ActiveRecord]]==
+
===[[Convenciones en ActiveRecord]]===
  
 
#[[Convenciones en ActiveRecord#Convenciones Generales|Convenciones Generales]]
 
#[[Convenciones en ActiveRecord#Convenciones Generales|Convenciones Generales]]
Línea 135: Línea 143:
 
#[[Convenciones en ActiveRecord#campo_in|campo_in]]
 
#[[Convenciones en ActiveRecord#campo_in|campo_in]]
  
==[[Convenciones para RDBMs]]==
+
===[[Convenciones para RDBMs]]===
  
 
#[[Convenciones para RDBMs#Convenciones Especiales para PostgreSQL|Convenciones Especiales para PostgreSQL]]
 
#[[Convenciones para RDBMs#Convenciones Especiales para PostgreSQL|Convenciones Especiales para PostgreSQL]]
 
#[[Convenciones para RDBMs#Convenciones Especiales para Oracle|Convenciones Especiales para Oracle]]
 
#[[Convenciones para RDBMs#Convenciones Especiales para Oracle|Convenciones Especiales para Oracle]]
  
=ACTIVE RECORD API=
+
==ACTIVE RECORD API==
 
+
A continuación veremos una referencia de los métodos que posee la clase ActiveRecord y
==[[Consultas]]==
+
su funcionalidad respectiva. Éstos se encuentran organizados alfabéticamente:
 
+
===[[Consultas]]===
 +
Métodos para hacer consulta de Registros:
 
#[[Consultas#distinct|distinct]]
 
#[[Consultas#distinct|distinct]]
 
#[[Consultas#find_all_by_sql(string $sql)|find_all_by_sql(string $sql)]]
 
#[[Consultas#find_all_by_sql(string $sql)|find_all_by_sql(string $sql)]]
Línea 156: Línea 165:
 
#[[Consultas#find_all_by_*campo*|find_all_by_*campo*]]
 
#[[Consultas#find_all_by_*campo*|find_all_by_*campo*]]
  
==[[Conteos y Sumatorias]]==
+
===[[Conteos y Sumatorias]]===
  
 
#[[Conteos y Sumatorias#count|count]]
 
#[[Conteos y Sumatorias#count|count]]
Línea 162: Línea 171:
 
#[[Conteos y Sumatorias#count_by_sql|count_by_sql]]
 
#[[Conteos y Sumatorias#count_by_sql|count_by_sql]]
  
==[[Promedios, Máximo y Mínimo]]==
+
===[[Promedios, Máximo y Mínimo]]===
  
 
#[[Promedios,_M%C3%A1ximo_y_M%C3%ADnimo#average|average]]
 
#[[Promedios,_M%C3%A1ximo_y_M%C3%ADnimo#average|average]]
Línea 168: Línea 177:
 
#[[Promedios,_M%C3%A1ximo_y_M%C3%ADnimo#minimum|minimum]]
 
#[[Promedios,_M%C3%A1ximo_y_M%C3%ADnimo#minimum|minimum]]
  
==[[Creación-Actualización-Borrado de Registros]]==
+
===[[Creación-Actualización-Borrado de Registros]]===
  
 
#[[Creación-Actualización-Borrado de Registros#create|create]]
 
#[[Creación-Actualización-Borrado de Registros#create|create]]
Línea 179: Línea 188:
 
#[[Creación-Actualización-Borrado de Registros#delete_all|delete_all]]
 
#[[Creación-Actualización-Borrado de Registros#delete_all|delete_all]]
  
==[[Validación]]==
+
===[[Validación]]===
  
 
#[[Validación#validates_presence_of|validates_presence_of]]
 
#[[Validación#validates_presence_of|validates_presence_of]]
Línea 189: Línea 198:
 
#[[Validación#validates_format_of|validates_format_of]]
 
#[[Validación#validates_format_of|validates_format_of]]
  
==[[Transacciones]]==
+
===[[Transacciones]]===
  
 
#[[Transacciones#commit()|commit()]]
 
#[[Transacciones#commit()|commit()]]
Línea 195: Línea 204:
 
#[[Transacciones#rollback()|rollback()]]
 
#[[Transacciones#rollback()|rollback()]]
  
==[[Otros Métodos]]==
+
===[[Otros Métodos]]===
  
 
#[[Otros Métodos#sql(string $sql)|sql(string $sql)]]
 
#[[Otros Métodos#sql(string $sql)|sql(string $sql)]]
  
==[[Callbacks ActiveRecord]]==
+
===[[Callbacks ActiveRecord]]===
  
 
#[[Callbacks ActiveRecord#Introduccion|Introduccion]]
 
#[[Callbacks ActiveRecord#Introduccion|Introduccion]]
Línea 217: Línea 226:
 
#[[Callbacks ActiveRecord#after_delete|after_delete]]
 
#[[Callbacks ActiveRecord#after_delete|after_delete]]
  
==[[Asociaciones]]==
+
===[[Asociaciones]]===
  
 
#[[Asociaciones#Introducción|Introducción]]
 
#[[Asociaciones#Introducción|Introducción]]
Línea 225: Línea 234:
 
#[[Asociaciones#Tiene y pertenece a muchos (has_and_belongs_to_many)|Tiene y pertenece a muchos (has_and_belongs_to_many)]]
 
#[[Asociaciones#Tiene y pertenece a muchos (has_and_belongs_to_many)|Tiene y pertenece a muchos (has_and_belongs_to_many)]]
  
==[[Paginadores]]==
+
===[[Paginadores]]===
  
 
#[[Paginadores#Paginate|Paginate]]
 
#[[Paginadores#Paginate|Paginate]]
Línea 232: Línea 241:
 
#[[Paginadores#Ejemplo completo de uso del paginador|Ejemplo completo de uso del paginador]]
 
#[[Paginadores#Ejemplo completo de uso del paginador|Ejemplo completo de uso del paginador]]
  
 +
=[[Application controller| APPLICATION CONTROLLER]]=
 +
=== [[Application_controller#M.C3.A9todos_de_la_Clase_ApplicationController| Métodos de la Clase ApplicationController]] ===
 +
La clase posee una serie de métodos que son útiles para el trabajo con controladores.
 +
= Métodos de la Clase ApplicationController =
 +
 +
La clase posee una serie de métodos que son útiles para el trabajo con controladores.
 +
 +
== render($view) ==
  
 +
Visualiza una vista que pertenece al mismo controlador.
  
=[[APPLICATION CONTROLLER]]=
+
'''Ejemplos de uso:'''
 +
<?php
 +
    class ProductosController extends ApplicationController {
 +
      function index(){
 +
          $this->render('consultar');
 +
      }
 +
    } //fin de la clase
 +
?>
  
=[[VIEWS Y HELPERS]]=
+
En este caso se visualizaría la vista views/productos/consultar.phtml
  
=[[AJAX]]=
+
== redirect($url, $seconds=0.5) ==
 +
Redirecciona la ejecución a otro controlador en un tiempo de ejecución determinado
 +
 
 +
'''Ejemplos de uso:'''
 +
  <?php
 +
    class ProductosController extends ApplicationController {
 +
      function index(){
 +
        $this->redirect('facturas/nueva', 2);
 +
      }
 +
    }
 +
  ?>
 +
 
 +
En el ejemplo va a facturas/nueva después de 2 segundos
 +
 
 +
== post($value) ==
 +
 
 +
    Obtiene acceso orientado a objetos a los valores de $_POST, $value es el índice para pasar
 +
al array asociativo.
 +
 
 +
== get($value) ==
 +
 
 +
    Obtiene acceso orientado a objetos a los valores de $_GET, $value es el índice para pasar al array asociativo.
 +
 
 +
== request($value) ==
 +
 
 +
    Obtiene acceso orientado a objetos a los valores de $_REQUEST, $value es el índice para pasar al
 +
array asociativo.
  
=[[EXTENSIONS (Módulos extras de KumbiaPHP)]]=
+
== render_partial($name) ==
='''Filter'''=
+
Visualiza una vista parcial (partial) que pertenece al mismo controlador. Ejemplo:
  
Para la Versión 0.5 se incorpora el componente Filter el cual proporciona un conjunto
+
'''Ejemplos de uso:'''
de filtros que serán aplicados a datos que lo requieran.
+
  <?php
 +
    class ProductosController extends ApplicationController {
 +
        function index(){
 +
            $this->render_partial('mostrar_menu');
 +
        }//fin del metodo
 +
      }//fin de la clase
 +
  ?>
  
=='''Que es un Filtro?'''==
+
En este caso se visualizaría la vista parcial views/productos/_mostrar_menu.phtml
Un filtro es utilizado habitualmente para eliminar porciones no deseadas de una entrada
 
de datos, y la porción deseada de la entrada pasa a través de la producción como filtro
 
(por ejemplo, café). En estos escenarios, un filtro es un operador que produce un
 
subconjunto de la entrada.
 
  
Este tipo de filtro es útil para aplicaciones web - la supresión
+
== route_to([params: valor]) ==
de entrada ilegal, innecesario el recorte de los espacios en blanco, etc.
+
  Hace el enrutamiento desde un controlador a otro, o desde una acción a otra. Recibe los parámetros
 +
con nombre:
 +
      • controller: A qué controlador se va a redireccionar
 +
      • action: A que acción se va a redireccionar
 +
      • id: Id de la redirección
  
Esta definición básica de un filtro puede ser ampliado para incluir a las transformaciones
+
'''Ejemplos:'''
generalizadas de entrada. Una transformación que se debe aplicar a las aplicaciones web
+
return $this->route_to("controller: clientes", "action: consultar", "id:1");
es el escapar de las entidades HTML.
 
  
Por ejemplo, si un campo de formulario es
+
El tipo de enrutamiento que realiza es interno, es decir que lo usuarios no notan cuando están siendo redireccionados en la aplicación.
automáticamente poco fiable de entrada, este valor debe ser libre de las entidades
 
HTML, a fin de evitar las vulnerabilidades de seguridad. Para cumplir con este requisito,
 
las entidades HTML que aparecen en la entrada debe ser eliminado o que se hayan
 
escapado.
 
  
Por supuesto, el enfoque que es más apropiado depende de la situación. Un filtro
+
== redirect($url_controlador) ==
que elimina las entidades HTML opera dentro del ámbito de aplicación de la primera
+
    Realiza un redireccionamiento a otro controlador/accion mediante HTTP. Es útil cuando queremos hacer
definición de filtro - un operador que produce un subconjunto de la entrada.
+
una real redirección que incluso cambie la URL que aparece en el explorador.
  
=='''Utilización Básica'''==
+
'''Ejemplo:'''
En este ejemplo se le pasa por el constructor de class Filter dos(upper, htmlspecialchars)
+
$this->redirect(/productos/query”);
filtros que serán aplicados a la cadena.
 
<source lang=php line>
 
$filter = new Filter('upper', 'htmlspecialchars');
 
$var = '<b>Hola</b>';
 
print_r($filter->apply($var)); //<B>HOLA</B>
 
</source>
 
A continuación se aplica el filtro de manera dinámica.
 
<source lang=php line>
 
$filter = new Filter();
 
$var = '<b>Hola</b>';
 
print_r( $filter->apply_filter($var, 'upper', 'htmlspecialchars')) //<B>HOLA</B>
 
</source>
 
  
Otra forma de aplicar filtros
+
== cache_layout($minutes) ==
<source lang=php line>
+
    Caché de la vista views/layout/ correspondiente al controlador durante $minutes.
$var = '<b>Hola</b>';
 
$filter = new Filter('upper', 'htmlspecialchars');
 
print_r ($filter->filter_value($var));
 
Adicionalmente los filtros soportan como parámetros a filtrar array
 
$var = array('<b>Hola</b>');
 
$filter = new Filter('upper', 'htmlspecialchars');
 
print_r( $filter->apply($var));//<B>HOLA</B>
 
</source>
 
  
=='''Métodos de la clase Filter'''==
+
== not_found($controller, $action) ===
 +
    Puedes definir el método not_found en cualquier controlador, en caso de estar definido se llamará
 +
cuando no encuentre definida alguna acción así es más fácil controlar este tipo de errores:
  
A continuación se listan los métodos disponibles en la clase filter, el constructor de la
+
''' Ejemplo '''
clase filter puede recibir los filtros a ser aplicados.
+
  <?php
 +
    class PruebaController extends ApplicationController {
 +
        function index(){
 +
            $this->render_text("Este es el index");
 +
        }
 +
        function not_found($controller, $action){
 +
            Flash::error("No esta definida la accion $action, redireccionando a index...");
 +
            return $this->route_to('action: index');
 +
        }
 +
    }
 +
  ?>
  
==='''Add_filter($filter)'''===
+
NOTA: Ahora en la versión 0.5 se incluye un vista views/not_found.phtml, esto
Agregar un filtro a la cola de filtros.
+
hace que no se haga necesario la implementacion del metodo not_found, ya que cuando no exista un controller o una acción se renderizara dicha vista, esta puede ser totalmente personalizada de manera que sea mas comodo el desarrollo.
  
==='''Apply($var, [filters])''' y '''apply_filter($var, [filters])'''===
+
== set_response($type)==
Aplica un filtros o un grupo de filtros a la variable $var.
+
    Especifica el tipo de respuesta que va a generar el controlador. Cuando es el valor de $type
 +
es view solamente envía la salida de la vista más no del layout, el template o cualquier cabecera
 +
html. Es ideal en salidas AJAX o PDF. Otro valor para $type es XML.
  
==='''Get_instance()'''===
+
'''Ejemplo'''
Obtiene una instancia singlenton.
+
  <?php
 +
    class PruebaController extends ApplicationController {
 +
        function accion_ajax(){
 +
            $this->set_response(“view”);
 +
        }
 +
    }
 +
  ?>
  
==='''Filtros Disponibles'''===
+
== is_alnum($valor) ==
Actualmente se cuenta con una serie de filtros que pueden utilizados.
+
Evalúa si un campo es alfanumérico o no. Es útil para validar la entrada de datos al
 +
recibirlos por parte de usuarios.
  
==='''Addslashes'''===
+
  <?php
Filtra una cadena haciendo addslashes
+
    class PruebaController extends ApplicationController {
 +
        function adicionar(){
 +
          $nombre = $this->request(“nombre”);
 +
          if($this->is_alnum($nombre)==false){
 +
              Flash::error(“Entrada invalidad para precio”);
 +
              return;
 +
            }
 +
          /* ..*/
 +
      }
 +
    }
 +
  ?>
  
==='''Alnun'''===
+
== load_record($record) ==
Filtra una cadena para que contenga solo alpha-numeic.
+
Carga los campos de un registro ActiveRecord como atributos del controlador, recibe
 +
como parámetro $record ActiveRecord o string registro ActiveRecord a cargar, si es un
 +
string este debe corresponder al nombre de un modelo Soporta argumento variable.
 +
    field: campos a cargar separados por coma
 +
    except: campos que no se cargaran separados por coma
 +
    suffix: sufijo para el atributo en el controlador
 +
    preffix: prefijo para el atributo en el controlador
  
==='''Alpha'''===
+
//Ejemplo1:
Filtra una cadena para que contenga solo alfabético
+
$usuario = $this->Usuario->find(1);
 +
$this->load_record($usuario);
  
==='''Date'''===
+
//Ejemplo2:
Filtra una cadena para que contenga el formato fecha, debe cumplir con un patrón.
+
$usuario = $this->Usuario->find();
 +
$this->load_record($usuario, 'except: id, sexo');
  
==='''Digit'''===
+
//Ejemplo3:
Filtra una cadena para que contenga solo Dígitos, sigue siendo un string lo que retorna el
+
$usuario = $this->Usuario->find(0);
método.
+
$this->load_record($usuario, 'field: nombre, apellido');
  
==='''Htmlentities'''===
+
//Ejemplo4:
Filtra una cadena y hace que todos los caracteres que tengan una entidad equivalente en
+
$usuario = $this->Usuario->find(1);
HTML serán cambiados a esas entidades.
+
$this->load_record($usuario, 'preffix: c_');
  
==='''htmlspecialchars'''===
+
//Ejemplo5:
Filtra una cadena htmlspacialchars.
+
$this->load_record('Usuario');
  
==='''Upper'''===
+
//Ejemplo6:
Filtra una cadena para que contenga solo Mayusculas
+
$this->load_record('Usuario', 'field: nombre, apellido');
  
==='''Trim'''===
+
== is_numeric($valor) ==
Filtra una cadena haciendo trim
+
Evalúa si un campo es numérico o no. Es útil para validar la entrada de datos al recibirlos por parte de usuarios.
  
==='''Striptags'''===
+
  <?php
Filtra una cadena para eliminar etiquetas
+
    class PruebaController extends ApplicationController {
 +
      function adicionar(){
 +
          $precio = $this->request(“precio”);
 +
          if($this->is_numeric($precio)!= '1'){
 +
                Flash::error(“Entrada invalida para precio”);
 +
                return;
 +
          }
 +
          /* ..*/
 +
      }
 +
    }
 +
  ?>
  
==='''Stripspace'''===
+
===[[Obtener valores desde el controller]] ===
Filtra una cadena para eliminar espacios
 
  
==='''Stripslaches'''===
+
===[[ApplicationControllerBase| ApplicationControllerBase (Clase padre)]] ===
Filtra una cadena haciendo stripslashes
 
  
==='''Numeric'''===
+
===[[Enrutamiento y redirecciones]] ===
Filtra una cadena para que contenga solo numerico.
 
  
==='''Nl2br'''===
+
=[[Vistas|VISTAS Y HELPERS]]=
Filtra una cadena convirtiendo caracteres de nueva linea en <br>
 
  
==='''Md5'''===
+
#[[Vistas#¿Porque usar Vistas?|¿Porque usar vistas?]]
Filtra una cadena encriptando a md5.
+
===[[Vistas#Uso de Vistas|Vistas]]===
 +
===[[Vistas#Uso de Layouts|Layouts]]===
 +
===[[Vistas#Uso de Templates|Templates]]===
 +
===[[Vistas#Uso de Partials|Partials]]===
 +
===[[Vistas#Uso de CCS en Kumbia|CCS en KumbiaPHP]]===
 +
===[[Vistas#Uso de content()|content()]]===
 +
==[[Vistas#|Helpers]]==
  
==='''Lower'''===
+
=[[AJAX]]=
Filtra una cadena para que contenga solo minuscula.
 
  
==='''Ipv4'''===
+
=[[EXTENSIONS (Módulos extras de KumbiaPHP)]]=
Filtra una cadena para que sea de tipo ipv4, debe cumplir con el patrón.
+
==[[Filter]]==
  
==='''Int'''===
+
#[[Filter#Qu.C3.A9_es_un_Filtro| Qué es un Filtro?]]
Filtra una cadena para que sea de tipo entero, retorna un integer método.
+
#[[Filter#Utilizaci.C3.B3n_B.C3.A1sica| Utilización básica]]
 +
#[[Filter#M.C3.A9todos_de_la_clase_Filter| Métodos de la clase Filter]]
  
 
=[[GENERADOR DE FORMULARIOS]]=
 
=[[GENERADOR DE FORMULARIOS]]=
 +
 +
#[[GENERADOR DE FORMULARIOS#|Tipos de Formularios]]
 +
#[[GENERADOR DE FORMULARIOS#|Ventajas Generadores de Formularios]]
 +
#[[GENERADOR DE FORMULARIOS#|Desventajas Generadores de Formularios]]
  
 
=[[EJEMPLOS]]=
 
=[[EJEMPLOS]]=
  
 
=[[GLOSARIO]]=
 
=[[GLOSARIO]]=

Revisión actual del 11:17 9 nov 2021

Nuevo manual actualizado para la v1 en español e ingles en Manual KumbiaPHP en Github

Este manual esta portándose del Manual PDF de KumbiaPHP Framework.

Esta abierto, para que la comunidad ayude a portarlo y mejorarlo. Más adelante, el manual en PDF se creará de este wiki.

AGRADECIMIENTOS[editar]

   Este manual es para agradecer a los que con su tiempo y apoyo en gran o en poca medida han ayudado a que este framework sea cada día mejor.
   A todos ellos Gracias Totales:
      Andres Felipe Gutierrez gutierrezandresfelipe@gmail.com
      Deivinson Tejeda deivinsontejeda@kumbiaphp.com
      Emilio Silveira emilio.rst@kumbiaphp.com
      César Caballero aka Phillipo phillipo@kumbiaphp.com

PREFACIO[editar]

  1. Sobre este libro
  2. Sobre Kumbia
  3. Sobre la comunidad
  4. Historia de Kumbia
  5. Que aporta Kumbia
  6. ¿Porque usar Kumbia?
  7. Modelo, Vista, Controlador (MVC)
    1. ¿Que es?
    2. Implementación y uso
    3. Información adicional
    4. Caso práctico

EMPEZANDO CON KUMBIA PHP FRAMEWORK[editar]

Instalar Kumbia [editar]

  1. Requisitos
  2. Descargar Kumbia
  3. Configuración de módulos (Apache, PHP y bbdd)
    1. Configurando Apache
      1. ¿Por qué es importante Mod-Rewrite?
    2. Configuración de PHP
      1. ¿Porque Kumbia utiliza PHP5?
    3. Configurando BB.DD
      1. Configuración de MySQL
      2. Configurando Oracle
  4. Configurar XAMPP
    1. Instalando XAMPP bajo Windows
    2. Instalando XAMPP bajo GNU/Linux
    3. Instalando XAMPP bajo Debian/Ubuntu Linux
  5. Configurar Apache2Triad
  6. Verificar la instalación de Kumbia
    1. Instalar Kumbia PHP en producción de forma segura

Estructura de Kumbia[editar]

  1. Introducción
  2. Directorios de entorno
    1. Explicación
  3. Archivos de entorno
    1. config.ini
      1. Explicación de los parámetros ./config/config.ini
    2. environment.ini
      1. Estructura del archivo ./config/environment.ini
      2. Explicación de los parámetros ./config/environment.ini
    3. routes.ini
      1. Explicación de los parámetros ./config/routes.ini
      2. Gestionar extensiones. Ejemplo práctico
  4. Resumen

Características avanzadas[editar]

  1. ¡Parámetros con Nombre!
  2. Obtener valores en una aplicación Kumbia
  3. Uso de Paquetes (Namespaces)
  4. Programación modular

Primera Aplicación en Kumbia[editar]

  1. Creando una nueva aplicación
  2. Hola Kumbia
  3. Kumbia URLS
  4. Nuestra Primera Acción
  5. Agregando más Contenido
  6. Repitiendo la Historia

TRABAJANDO CON KUMBIA PHP FRAMEWORK[editar]

MODELOS[editar]

  1. Introducción
  2. ¿Por qué usar una capa de Abstracción?
  3. Capa de Abstracción Independiente en Kumbia
  4. Adaptadores Kumbia
  5. Esquema de Acceso a BB.DD en Kumbia
  6. Modelos
    1. Características de los modelos:
    2. Acceso Directo a RDBMS
      1. La Clase DdBase
      2. Propiedades de la Clase DB
        1. $db->Id_Connection
        2. $db->dbUser
        3. $db->dbPass
        4. $db->dbHost
        5. $db->dbName
        6. $db->dbPort
        7. $db->lastError
        8. $db->lastResultQuery
      3. Métodos de la Clase DB
        1. connect()
        2. query()
        3. close()
        4. fetch_array()
        5. field_name()
        6. data_seek()
        7. affected_rows()
        8. error()
        9. no_error()
        10. find()
        11. in_query()
        12. in_query_assoc()
        13. in_query_num()
        14. fetch_one()
        15. table_exists()

ACTIVE RECORD[editar]

  1. Ventajas del ActiveRecord
  2. Crear un Modelo en Kumbia PHP Framework
  3. Columnas y Atributos
  4. Llaves Primarias y el uso de IDs

CRUD: Create, Read, Update, Delete[editar]

  1. Creando Registros
  2. Consultando Registros
  3. El poderoso Find
  4. Promedio, Contando, Sumando, Mínimo y Máximo
  5. Actualizando Registros existentes
  6. Borrando Registros
  7. Propiedades Soportadas

Convenciones en ActiveRecord[editar]

  1. Convenciones Generales
  2. id
  3. campo_id
  4. campo_at
  5. campo_in

Convenciones para RDBMs[editar]

  1. Convenciones Especiales para PostgreSQL
  2. Convenciones Especiales para Oracle

ACTIVE RECORD API[editar]

A continuación veremos una referencia de los métodos que posee la clase ActiveRecord y su funcionalidad respectiva. Éstos se encuentran organizados alfabéticamente:

Consultas[editar]

Métodos para hacer consulta de Registros:

  1. distinct
  2. find_all_by_sql(string $sql)
  3. find_by_sql(string $sql)
  4. find_first
  5. find
  6. select_one(string $select query)
  7. select_one(string $select query) (static)
  8. exists
  9. find_all_by
  10. find_by_*campo*
  11. find_all_by_*campo*

Conteos y Sumatorias[editar]

  1. count
  2. sum
  3. count_by_sql

Promedios, Máximo y Mínimo[editar]

  1. average
  2. maximum
  3. minimum

Creación-Actualización-Borrado de Registros[editar]

  1. create
  2. update
  3. update_all
  4. save
  5. create_from_request
  6. save_from_request
  7. delete
  8. delete_all

Validación[editar]

  1. validates_presence_of
  2. validates_length_of
  3. validates_numericality_of
  4. validates_email_in
  5. validates_uniqueness_of
  6. validates_date_in
  7. validates_format_of

Transacciones[editar]

  1. commit()
  2. begin()
  3. rollback()

Otros Métodos[editar]

  1. sql(string $sql)

Callbacks ActiveRecord[editar]

  1. Introduccion
  2. before_validation
  3. before_validation_on_create
  4. before_validation_on_update
  5. after_validation_on_create
  6. after_validation_on_update
  7. after_validation
  8. before_save
  9. before_update
  10. before_create
  11. after_update
  12. after_create
  13. after_save
  14. before_delete
  15. after_delete

Asociaciones[editar]

  1. Introducción
  2. Pertenece (belongs_to)
  3. Tiene un (has_one)
  4. Tiene muchos (has_many)
  5. Tiene y pertenece a muchos (has_and_belongs_to_many)

Paginadores[editar]

  1. Paginate
  2. Paginate_by_sql
  3. Paginando en ActiveRecord
  4. Ejemplo completo de uso del paginador

APPLICATION CONTROLLER[editar]

Métodos de la Clase ApplicationController[editar]

La clase posee una serie de métodos que son útiles para el trabajo con controladores.

Métodos de la Clase ApplicationController[editar]

La clase posee una serie de métodos que son útiles para el trabajo con controladores.

render($view)[editar]

Visualiza una vista que pertenece al mismo controlador.

Ejemplos de uso:

<?php
   class ProductosController extends ApplicationController {
      function index(){
         $this->render('consultar');
      }
    } //fin de la clase
?>

En este caso se visualizaría la vista views/productos/consultar.phtml

redirect($url, $seconds=0.5)[editar]

Redirecciona la ejecución a otro controlador en un tiempo de ejecución determinado

Ejemplos de uso:

 <?php
   class ProductosController extends ApplicationController {
     function index(){
        $this->redirect('facturas/nueva', 2);
     }
   }
 ?>

En el ejemplo va a facturas/nueva después de 2 segundos

post($value)[editar]

   Obtiene acceso orientado a objetos a los valores de $_POST, $value es el índice para pasar
al array asociativo.

get($value)[editar]

   Obtiene acceso orientado a objetos a los valores de $_GET, $value es el índice para pasar al array asociativo.

request($value)[editar]

   Obtiene acceso orientado a objetos a los valores de $_REQUEST, $value es el índice para pasar al
array asociativo.

render_partial($name)[editar]

Visualiza una vista parcial (partial) que pertenece al mismo controlador. Ejemplo:

Ejemplos de uso:

  <?php
    class ProductosController extends ApplicationController {
       function index(){
           $this->render_partial('mostrar_menu');
       }//fin del metodo
     }//fin de la clase
  ?>

En este caso se visualizaría la vista parcial views/productos/_mostrar_menu.phtml

route_to([params: valor])[editar]

  Hace el enrutamiento desde un controlador a otro, o desde una acción a otra. Recibe los parámetros 

con nombre:

     • controller: A qué controlador se va a redireccionar
     • action: A que acción se va a redireccionar
     • id: Id de la redirección

Ejemplos: return $this->route_to("controller: clientes", "action: consultar", "id:1");

El tipo de enrutamiento que realiza es interno, es decir que lo usuarios no notan cuando están siendo redireccionados en la aplicación.

redirect($url_controlador)[editar]

   Realiza un redireccionamiento a otro controlador/accion mediante HTTP. Es útil cuando queremos hacer
una real redirección que incluso cambie la URL que aparece en el explorador.

Ejemplo: $this->redirect(“/productos/query”);

cache_layout($minutes)[editar]

   Caché de la vista views/layout/ correspondiente al controlador durante $minutes.

not_found($controller, $action) =[editar]

   Puedes definir el método not_found en cualquier controlador, en caso de estar definido se llamará
cuando no encuentre definida alguna acción así es más fácil controlar este tipo de errores:

Ejemplo

  <?php
    class PruebaController extends ApplicationController {
       function index(){
           $this->render_text("Este es el index");
       }
       function not_found($controller, $action){
           Flash::error("No esta definida la accion $action, redireccionando a index...");
           return $this->route_to('action: index');
       }
    }
  ?>

NOTA: Ahora en la versión 0.5 se incluye un vista views/not_found.phtml, esto hace que no se haga necesario la implementacion del metodo not_found, ya que cuando no exista un controller o una acción se renderizara dicha vista, esta puede ser totalmente personalizada de manera que sea mas comodo el desarrollo.

set_response($type)[editar]

   Especifica el tipo de respuesta que va a generar el controlador. Cuando es el valor de $type
es view solamente envía la salida de la vista más no del layout, el template o cualquier cabecera
html. Es ideal en salidas AJAX o PDF. Otro valor para $type es XML.

Ejemplo

  <?php
    class PruebaController extends ApplicationController {
       function accion_ajax(){
           $this->set_response(“view”);
       }
    }
  ?>

is_alnum($valor)[editar]

Evalúa si un campo es alfanumérico o no. Es útil para validar la entrada de datos al recibirlos por parte de usuarios.

  <?php
    class PruebaController extends ApplicationController {
       function adicionar(){
          $nombre = $this->request(“nombre”);
          if($this->is_alnum($nombre)==false){
              Flash::error(“Entrada invalidad para precio”);
              return;
           }
          /* ..*/
      }
    }
  ?>

load_record($record)[editar]

Carga los campos de un registro ActiveRecord como atributos del controlador, recibe como parámetro $record ActiveRecord o string registro ActiveRecord a cargar, si es un string este debe corresponder al nombre de un modelo Soporta argumento variable.

    field: campos a cargar separados por coma
    except: campos que no se cargaran separados por coma
    suffix: sufijo para el atributo en el controlador
    preffix: prefijo para el atributo en el controlador

//Ejemplo1: $usuario = $this->Usuario->find(1); $this->load_record($usuario);

//Ejemplo2: $usuario = $this->Usuario->find(); $this->load_record($usuario, 'except: id, sexo');

//Ejemplo3: $usuario = $this->Usuario->find(0); $this->load_record($usuario, 'field: nombre, apellido');

//Ejemplo4: $usuario = $this->Usuario->find(1); $this->load_record($usuario, 'preffix: c_');

//Ejemplo5: $this->load_record('Usuario');

//Ejemplo6: $this->load_record('Usuario', 'field: nombre, apellido');

== is_numeric($valor) ==

Evalúa si un campo es numérico o no. Es útil para validar la entrada de datos al recibirlos por parte de usuarios.

  <?php
    class PruebaController extends ApplicationController {
      function adicionar(){
          $precio = $this->request(“precio”);
          if($this->is_numeric($precio)!= '1'){
               Flash::error(“Entrada invalida para precio”);
               return;
          }
          /* ..*/
      }
    }
  ?>

Obtener valores desde el controller[editar]

ApplicationControllerBase (Clase padre)[editar]

Enrutamiento y redirecciones[editar]

VISTAS Y HELPERS[editar]

  1. ¿Porque usar vistas?

Vistas[editar]

Layouts[editar]

Templates[editar]

Partials[editar]

CCS en KumbiaPHP[editar]

content()[editar]

Helpers[editar]

AJAX[editar]

EXTENSIONS (Módulos extras de KumbiaPHP)[editar]

Filter[editar]

  1. Qué es un Filtro?
  2. Utilización básica
  3. Métodos de la clase Filter

GENERADOR DE FORMULARIOS[editar]

  1. Tipos de Formularios
  2. Ventajas Generadores de Formularios
  3. Desventajas Generadores de Formularios

EJEMPLOS[editar]

GLOSARIO[editar]