Simple Framework - UnderC0de Proyect

Iniciado por alexander1712, Noviembre 26, 2012, 12:42:17 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Noviembre 26, 2012, 12:42:17 AM Ultima modificación: Noviembre 26, 2012, 12:45:10 AM por alexander1712

Bueno, hoy me da el agrado de presentar la primer versión del framework de underc0de...

¿Cual es la idea?

La idea era hacer un simple framework, que nos permita manejar el código de forma ordenada en MVC, utilizando un gestor de plantillas y un gestor de base de datos, además de algunas funciones extras que puedan ser utilizadas...

En realidad no es la gran cosa, simplemente un conjunto de librerías, y una base de código para hacer más ameno el trabajo y los códigos...

¿Cómo está armado?

Tenemos 3 partes, la vista que está en html, css, imagenes, etc. (todo lo visual y lo que va del lado del cliente), los controladores, que están en estructurada, para evitar derroche de recursos innecesarios, y los modelos que están en POO para mantener un orden en el código.

si bien a mi me gusta la programación orientada a objetos, no veo de buena manera el uso excesivo y abuso en si de la programación orientada a objetos por tanto hay partes en estructurada y partes en poo.

¿Cómo lo descargo?

Puedes descargarlo desde No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

¿Para que me sirve?

te facilita gran parte del código, y tendrías que basarte nada más en hacer las acciones de tu sistema.




en éste mismo post se hará un manual extensivo del uso del framework y se irá actualizando en conjunto con el mismo.

Fecha de inicio del proyecto: Noviembre 06 del 2012

Última versión: 1.0.1

Estado: Recien iniciado el proyecto.

Saludos!

Noviembre 26, 2012, 12:47:56 AM #1 Ultima modificación: Noviembre 26, 2012, 12:56:57 AM por alexander1712
Instalando nuestro framework

Una vez descargado el Framework hay que descomprimirlo en la carpeta htdocs o donde nosotros estemos trabajando en el desarrollo de nuestro sitio.

abrir el archivo settings/set.database.php y configurar la db (los usuarios de su script o usted deberá configurar la db en ese archivo)

una vez hecho esto acceda a

localhost

y verá la pantalla de bienvenida de nuestro framework... listo! el framework ya está funcionando y está instalado!

Noviembre 26, 2012, 12:55:59 AM #2 Ultima modificación: Noviembre 26, 2012, 01:31:30 AM por alexander1712
Conociendo nuestro Framework

veamos, en nuestro framework nosotros trabajaremos con los archivos que están en settings/ y con los archivos que encontraremos dentro de app/, (estas carpetas se pueden cambiar a gusto y No tienes permitido ver los links. Registrarse o Entrar a mi cuenta)

dentro de app tendremos nuestra aplicación, todos los archivos de nuestro sistema, el resto son cosas del framework.

está separada nuestra aplicación en 3 carpetas, Controller, que son los archivos que representan cada acción de nuestro sistema (como por ejemplo el login, el registro, crear algo, o la pagina de bienvenida), si se fijan hay un ejemplo, dentro de esa carpeta tenemos 2 archivos c.e404.php que se ejecuta cuando se quiere acceder a una zona del sitio que no existe, y c.home.php que es el archivo que se ejecuta cuando nosotros en el navegador ponemos localhost/home/ o localhost, en el ejemplo simplemente es un archivo de bienvenida.

esto está basado en MVC (recomiendo leer un poco sobre él), lo que establece básicamente es separar el diseño de la lógica y los datos, teniendo entonces, el diseño dentro de la carpeta view, que si se fijan, simplemente es html y css, los datos que están en model, (una abstracción de la base de datos, o en otras palabras nuestra db simplificada, osea todas las consultas irán ahí) y en controladores tenemos la lógica, osea todo lo que son las verificaciones y demaces.

recién instalado el framework tenemos una aplicación de ejemplo (que es lo que vimos cuando pusimos localhost).

saludos!

Analizando la aplicación de ejemplo - listado de acciones

lo primero que tenemos que tener en cuenta es que al nosotros escribir localhost (o localhost/home/ que es lo mismo) estamos intentando realizar una acción, que es mostrar la home, el framework cuando ocurra esto querrá ejecutar el archivo c.home.php pero para que realmente se ejecute tienen que ocurrir dos cosas

la 1º es que exista dicho archivo, en caso contrario tirará error, pero... si nosotros ponemos localhost/roberto/ y no existe el archivo tiraría error, entonces para que esto ocurra se debe cumplir la segunda cosa, que esté en la lista de acciones válidas.

veamos, nosotros podemos escribir lo que queramos en la url, pero para que el framework sepa que es realmente una acción válida la tenemos que definir en una lista, esa lista está en el archivo:

set.actions.php dentro de la carpeta settings.

Código: php
<?php

// acción por defecto
define ('DEFAULT_DISPATCH','home');

// ALL (con diseño) AJAX (solo para devolución de ajax)

// acciones y tipo de carga
$__DISPATCH = array (
                     'home' => 'ALL'
                    );


si se fijan abajo dice array  y dice 'home' => 'ALL'

si nosotros queremos activar otra acción podemos poner una coma luego de 'ALL' y en el renglón de abajo poner 'roberto' => 'ALL' esto haría que localhost/roberto/ sea una acción válida y se pueda ejecutar, si queremos acceder a una acción que no es válida, el framework auotmáticamente carga c.e404.php.

saludos!

Analizando la aplicación de ejemplo - el controlador

los controladores están en estructurada, ésto quiere decir que no tienen clases ni cosas raras, tomemos como ejemplo el controlador c.home.php que es el que se carga en el proyecto de muestra:

Código: php
<?php

// cargamos un modelo pasandole el control de la base de datos
$home = new home($db);

// cargamos de ejemplo la librería standard input output del framework
lib_load('stdio');
// obtenemos la ip usando la funcion getip de stdio
$ip = getip();

// cargamos la librería parseadora de bbcode
lib_load('parser');

// asignamos el bbcode (podriamos guardar una variable en set.general.php con el bbcode y pasarlo a la clase directamente sin asignarlo aquí al bbcode)
Parser::$BBCN = array(
                          '[b]'=>'<b>',
                          '[/b]'=>'</b>'
                         );

// parseamos el la ip con bbcode 
$resultado = Parser::Parsear_bbcn('[b]'.$ip.'[/b]');

// asignamos un valor de bienvenido a la vista
$view->assign('bienvenido', $home->welcome($resultado));

// mostramos la vista home
$view->draw('home');


lo primero que hacemos es cargar el modelo home (obviamente el archivo class.home.php dentro de model)

luego cargamos una librería del framework que nos permite usar nuevas funciones como getip (luego se detallarán las distintas librerías y funciones que agregan)

se obtiene la ip, se carga otra librería especial para parsear bbcode, se define el bbcode, y se parsea un texto para darle negrita a la ip.

luego se asigna el texto que se obtiene del modelo home funcion welcome, y se asigna a la vista (para que pueda ser mostrado luego)

y por último se carga un archivo html para mostrar.

como verán, el controlador, es el que maneja la vista y los modelos para obtener un resultado...

saludos!

Analizando la aplicación de ejemplo - el modelo

veamos ahora el modelo de ejemplo home (class.home.php)

lo primero que se crea es una estructura de código de tipo class que contendrá las funciones y variables del modelo home.

luego se declara una variable en modo protected (que solo puede ser accedida desde la misma clase y no puede ser heredada, vease programación orientada a objetos) para ponerle el controlador de bases de datos.

se utiliza el metodo construct para guardar el controlador de base de datos a la variable y ser usada en las demás funciones que pudieran haber en la clase.

se crea la función welcome que luego es llamada y se le pasa la ip en negrita.

se devuelve el texto que luego es asignado a la vista para ser mostrado.

tengase en cuenta que ese código está mal, porque se propone que en las clases solo estén consultas a las bases de datos.

saludos!

Analizando la aplicación de ejemplo - la vista

Si analizamos detenidamente el código del controlador vemos que en ésta linea:

Código: php
$view->assign('bienvenido', $home->welcome($resultado));


asignamos a 'bienvenido' el valor devuelto por la función welcome del modelo home.

y en nuestro archivo home.html dentro de view tenemos en una parte {$bienvenido} eso es reemplazado por el valor devuelto por la función del modelo...

saludos!

Analizando la aplicación de ejemplo

bueno la aplicación de ejemplo no tiene tanta ciencia, les recomiendo intentar hacer un login o algo así para ir probando, pero tengan en cuenta los tres pilares de MVC para no confundirse...

saludos!

Consultas a la DB

bueno, a continuación explicaré como hacer una consulta a la db, puesto que en nuestro framework eso se trabaja con una clase, que filtra y hace segura todas las consultas...

tomemos para mostrar los distintos usos la clase home de la aplicación de ejemplo:

Código: php
<?php

// clase basica de ejemplo
class home
{

  // variable para guardar la db
  Protected $db = null;
 
  // metodo constructor para guardar la db en la variable
  Public function __construct($database)
   {
    $this->db = $database;
   }
   
  Public function welcome($ip)
   {
    // aquí en realidad iría una consulta a la db
    return 'Bienvenido '.$ip.' a Simple-Framework (SFW)';
   }

}


supongamos ahora que a nuestra clase le queremos agregar una función para registrar usuarios, todas las validaciones del registro se hacen en el controlador, el formulario se hace en la vista, y se manda un post a la acción que guardará los valores a la db, y se utiliza un modelo para hacer efectivo el guardado en la db, recuerden que son para eso los modelos.

entonces agregamos una funcion registro

Código: php
Public function registro($usuario, $contraseña)
{

}


para realizar un insert con littleDB tenemos que llamar a la variable interna de la clase que guarda la instancia de la db

$this->db

y llamar a su función insert

$this->db->insert('TABLA',array('campo'=>$valor,'campo'=>$valor),TRUE/FALSE);

(a tener en cuenta que el true y false es para saber si devolver o no el id de ese registro creado, solo funciona si el campo es id)

esto tiene filtro automático para injecciónes sql y simplifica nuestro código. además ante cambios de mysql por mysqli o por los que vengan luego, solo se cambia la librería no todo el código.

para entender mejor el funcionamiento de littledb y las clases y demaces hay un código mío No tienes permitido ver los links. Registrarse o Entrar a mi cuenta que es de un blog que usa littledb y este tipo de programación.

también pueden ver los comentarios de littledb.php dentro de libs, que explican su funcionamiento (desarrollado por cody roodaka, un amigo)

saludos!

La vista

para trabajar con la vista yo recomiendo leerse la No tienes permitido ver los links. Registrarse o Entrar a mi cuenta de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta... ahí puse los links en las palabras.

saludos!

Cambiar nombre a las carpetas

para que el framework funcione cambiandole el nombre a las carpetas, hay que redefinir los valores asignados en las constantes del archivo base.php

saludos!

Pasaje de parametros

para captar parametros por get hay que tener en cuenta lo siguiente:

Código: php
localhost/controlador/variable1/variable2/variable3/


siempre la url tiene que terminar en /

para acceder al valor de la variable1 hay que utilizar la variable $FRK_URL con subindice 1

Código: php
$FRK_URL[1];


eso representa al valor en la posición de la variable 1

(tengase en cuenta que no se puede poner de nombre a un controlador ajax, porque habilita el modo de devolución ajax)

saludos!

Librerias del framework

para hacerte la vida más fácil se desarrollaron librerías que puedes llamar en cualquier momento con la función lib_load('nombre_de_la_librería');

En éste apartado se definirán las librerías hasta la versión 1.0.1 si se crean nuevas librerías en versiones superiores se presentarán en otro comentario.

-------------------------------------------------

extend name: stdbs.php
real name: standard basic system

descripción:
Ésta librería la carga automáticament el framework, siempre está presente, no hace falta utilizar lib_load.

funciones:

Código: php
roundsize ($size = int, $full=boolean)


devuelve el valor de un tamaño con nombre, ejemplo 10kb, es utilizada por el framework para conteos de uso de memoria en modo debug. el full establece si se devuelve kb o KiloByte

Código: php
lib_load($lib=string);


carga una librería de las existentes. en caso de que no exista tira error el intérprete (corregido en versión siguiente)

Código: php
simple_return ($outer = string);


rename de echo, utilizada cuando se hace una devolución de texto para ajax.

-------------------------------------------------

extend name: stdio.php
real name: standard input output

descripción:
librería con comandos básicos de entrada y salida de datos.

funciones:

Código: php
getip();


devuelve la ip del visitante

Código: php
set_seo( $string );


devuelve el string pasado por referencia en modo Seo, para utilizar en urls amigables, (sin espacios, sin simbolos raros, ni acentos, solo letras numeros y guiones)

Código: php
redirect( $Surl );


realiza una redirección hacia la url (abreviación de header('Location: url'); )

-------------------------------------------------

extend name: stdsec.php
real name: standard secure

descripción:
librería para manejo de seguridad.

funciones:

Código: php
filter_POST();


retorna el arreglo de variables recibidos por post filtrados con htmlentities

Código: php
filter_GET();


retorna el arreglo de variables recibidos por get filtrados con htmlentities

Código: php
gen_semilla_str();


genera una semilla de string de 5 caracteres al azar

Código: php
gen_semilla_int($num);


genera una semilla numérica de la cantidad de digitos establecidos en $num

Librerias del framework especiales

captcha.php

permite generar un captcha, pero es una clase entera, al crear una instancia se requiere la ubicación de donde se creará.

set_value genera el valor del captcha al azar

check($val) se pasa por referencia el valor ingresado y devuelve si es correcto o no.

create() hace efectiva la creación del captcha

--------------------------------------------

parser.php

clase para parsear bbcode.

se divide en dos: bbcn y bbcc el primero permite etiquetas con apertura y cierre y el segundo etiquetas complejas.

ejemplo de uso oficial de la clase:

Código: php
 /**
   *      EJEMPLO DE USO PARSER BBCN
   *
   * Parser::$BBCN = array(
   *                       '[b]'=>'<b>',
   *                       '[/b]'=>'</b>'
   *                      );
   *
   * $resultado = Parser::Parsear_bbcn('[b]hola[/b]');
   *
   * echo $resultado;
   *
   * mostrará hola en negrita.-
   */


/**
   *      EJEMPLO DE USO PARSER BBCC
   *
   * Parser::$BBCC = array(
   *                       '[url=?]?[/url]'=>'<a href="$1">$2</a>',
   *                      );
   *
   * $resultado = Parser::Parsear_bbcc('[b]hola[/b]');
   *
   * echo $resultado;
   *
   * mostrará hola en negrita.-
   */


--------------------------------------------

phpass.php

clase de encryptación de contraseñas muy conocida y eficaz, su implementación será explicada luego.

modo ajax

el modo ajax le permitirá hacer transacciones de datos sin cargar la vista, todo funciona igual a diferencia que los controladores no dispondrán de la variable $view, no obstante pueden usar simple_return();

en la lista de acciones para ajax un controlador se establece así:

Código: php
'controlador' => 'AJAX'


mientras que para un normal:

Código: php
'controlador' => 'ALL'


tenga en cuenta que para llamar a un controlador por ajax la url es:

localhost/ajax/controlador/variable2/variable3

(la variable 1 queda anulada de modo que solo se pueden tomar así: $FRK_URL[2];)

la variable $FRK_URL[1]; devolverá el nombre del controlador que quiere ser llamado.

saludos!

Obtener nombre del controlador que se está ejecutando y si es por ajax

para obtener el nombre del controlador si no se ejecuta por ajax es:

Código: php
$FRK_URL[0];


y si es un pedido por ajax:

Código: php
$FRK_URL[1];


se puede saber si es por ajax o no si el $FRK_URL[0]=='ajax';

Noviembre 26, 2012, 02:05:44 AM #16 Ultima modificación: Noviembre 26, 2012, 02:32:48 AM por alexander1712
Aclaración final

con éste framework no se pretende ni ser el mejor ni demostrar nada, solo mostrarle a los nuevos y a todos que hacer un framework para uso personal no es tan complejo, y uno puede tener simplemente lo que quiere, éste framework es fácil de modificar, y puede ser aplicado a gusto personal, como también no es muy grande ni muy robusto, es simple y sencillo, una idea para que todos empiezen con esto.

yo no soy un gurú de php, simplemente un aprendiz que quiso hacer algo más que un pequeño código y está experimentando con ésto.

estos ejemplos fueron realizados lo más simple posibles así todos hasta las personas con conocimientos básicos pueden entenderlos, y por eso no se ah utilizado en su mayoría tecnicismos, además son simples ejemplos puntuales, por ejemplo cuando establezco la posibilidad de crear una función registro en la clase home, en realidad es simplemente dar la idea de como funcionaría utilizando la unica clase que había (home) pero no se recomienda hacerlo ahí porque carece de sentido total, no concuerda, con el objetivo de la clase, digamos que registro de usuarios con las consultas de la portada no tienen mucho que ver.

saludos!