He logrado construir la base del MVC. Ahora Velkan puede funcionar con clases controladores y renderizar vistas. También ya puede manejar errores en páginas predefinidas y puede manejar una vista base del sitio que sirve como layout.
Lo siguiente es trabajar en el modelo, la parte lógica y que vinculara a la vista con la base de datos.
Deberá de ser sencillo, tendré una clase que me permita manejar objetos de la base de datos, y crearé un controlador sencillo también para MySql, que podrá ser fácilmente substituible por otro controlador para otra base de datos.
Para el objeto de base de datos pensé en algo que me permitiera sólo llamar a una tabla y que esta clase me determine los campos, pero para eso tendría que hacer un query, y ya en un sistema de varios usuarios no lo considero funcional porque sería una llama extra a la base de datos.
Voy a abrir una cuenta en gitHub cuando tenga mi primer versión con la parte del modelo terminada y con los controladores form, input y combobox.
Otros framework que he visto piden en primera instancia generar la aplicación desde la línea de comandos. Se crean todas las carpetas necesarias, pero si alguien quiere modificar el framework se vuelve un tanto más complicado. En el caso de Velkan bastará con copiar los archivos, y si se requiere mejorar la funcionalidad por algo más avanzado, será súper sencillo.
¿Y la seguridad?
He leído de cual es la mejor forma de mantener la seguridad en los sitios web, mejor dicho, me estoy enfocando en el manejo de sesiones. Para esto voy a construir una clase que me permita mantener la sesión por tres medios: cookies, tokens y por medio de la variable de sesión.
El tema con esto es quitarle esa preocupación al programador de como manejar sus sesiones, y de nuevo, hacerlo lo más simple posible.
Velkan determinara si los tres medios pueden usarse al mismo tiempo, por lo menos se que dos si (los tokens y las variables de sesión). Si el usuario navegador del sitio no tiene activadas las cookies, diremos que Velkan está en un nivel de seguridad 2. Si el programador decide sólo utilizar las variables de sesión diremos que Velkan está en un nivel de seguridad 1. Si los tres métodos son accesibles, tendremos nivel de seguridad 3.
Veremos como queda.
domingo, 27 de enero de 2013
jueves, 24 de enero de 2013
Model-View-Controller
He avanzado en el trato de los input y el form, pero estoy haciendo una pausa. Voy a implementar el esquema Modelo-Vista-Controlador (MVC).
El MVC es utilizado por frameworks como Yii y Zend. Al principio no entendía como funcionaba, pero viendo como funciona Yii en estos videos logre entender que es una separación de las capas de negocio, procesamiento y presentación al usuario.
Para empezar me base el estos videos, donde se construye un MVC simple, pero que a mi parecer lo suficiente para comenzar.
Velkan manejara las típicas tres carpetas: models (donde estarán los procesos de base de datos), views (donde estarán los códigos HTML) y controllers (donde estarán las clases con sus respectivas acciones).
Tendrá una clase ruteadora que a través de otra clase (request) definirá que controlador cargar, este a su vez, dependiendo de que acción deba ejecutar, renderizara las vistas.
Aquí se complica un poco al seguir desarrollando el framework, pero seguiré manteniendo la línea de que sea lo más simple para el programador que lo utilice.
El MVC es utilizado por frameworks como Yii y Zend. Al principio no entendía como funcionaba, pero viendo como funciona Yii en estos videos logre entender que es una separación de las capas de negocio, procesamiento y presentación al usuario.
Para empezar me base el estos videos, donde se construye un MVC simple, pero que a mi parecer lo suficiente para comenzar.
Velkan manejara las típicas tres carpetas: models (donde estarán los procesos de base de datos), views (donde estarán los códigos HTML) y controllers (donde estarán las clases con sus respectivas acciones).
Tendrá una clase ruteadora que a través de otra clase (request) definirá que controlador cargar, este a su vez, dependiendo de que acción deba ejecutar, renderizara las vistas.
Aquí se complica un poco al seguir desarrollando el framework, pero seguiré manteniendo la línea de que sea lo más simple para el programador que lo utilice.
lunes, 21 de enero de 2013
El form y el control input
Actualmente estoy trabajando en el control form y el control input solamente.
Centrandome en el control input, y viendo ciertas funciones de Bootstrap (aunque por el momento no todas), puedo generar formularios con el siguiente código:
Esto me generará el siguiente formulario:
Centrandome en el control input, y viendo ciertas funciones de Bootstrap (aunque por el momento no todas), puedo generar formularios con el siguiente código:
<?php
include_once "velkan.php";
$velkan=new velkan(array("level"=>"",
"title"=>"Form e input"));
$input=new velkan_input(array("id"=>"id_1",
"name"=>"name_1",
"label"=>"Prueba 1:",
"placeholder"=>"Prueba de input"));
$input2=new velkan_input(array("id"=>"id_2",
"name"=>"name_2",
"label"=>"Prueba 2:",
"placeholder"=>"Prueba de input 2"));
$input2->set_append("00");
$input3=new velkan_input(array("id"=>"id_3",
"name"=>"name_3",
"label"=>"Prueba 3:",
"placeholder"=>"Prueba de input 3"));
$input3->set_prepend("@");
$form=new velkan_form(array("id"=>"forma",
"action"=>"#",
"method"=>"post"));
$form->add_obj("<legend>Prueba de input</legend>");
$form->add_obj($input);
$form->add_obj($input2);
$form->add_obj($input3);
$form->set_type(velkan_form::$FORM_TYPE_HORIZONTAL);
$velkan->add_obj($form);
$velkan->render();
unset($velkan);
?>
Parece mucho código, pero la ventaja será que estos componentes tendrán funciones y demás ya de forma predefinida.
Esto me generará el siguiente formulario:
Teniendo esto puedo hacer muchas cosas, como agregarle funciones javascript a cada input.
sábado, 19 de enero de 2013
Primeros pasos...
Como podrán imaginar, ya tengo algo desarrollado, lo estoy probando aún, y me faltan bastantes controles, pero voy avanzando. Hasta el momento, lo que he desarrollado me gusta.
Comencé por desarrollar un modulo principal que pudiera ir almacenando objetos y renderizarlos en el orden en que se agregan.
Lo llame velkan.php.
Esta clase se encargaría de ir agregando cada objeto. Tendría funciones generales que compartiría con las demás clases.
Parte del objetivo de este proyecto es tener controles que hagan las validaciones de formato, validaciones en formas en campos requeridos y similares. Otro objetivo era hacer combobox dependientes de manera sencilla. Era un obstáculo a superar, pero lo hice.
En un principio, cuando hice los primeros pasos, fue fácil. Cree primero el objeto form, y después el objeto input. Hice una prueba agregando a cada objeto la funcion render(), haciendo que el objeto form buscara en un arreglo todo objeto que tuviera el metodo render(), y lo ejecutaba, de la siguiente forma:
De esta forma es sencillo ir agregando objetos y renderizarlos despues.
La primer prueba fue exitosa. La forma de generar un formulario quedo de la siguiente forma:
Esto generará el formulario siguiente:
Con el código siguiente:
<!DOCTYPE html>
<html>
<head>
<meta name="application-name" content="Saicom">
<meta name="author" content="Anwar Garcia">
<meta name="generator" content="Menos Codigo">
<link rel="stylesheet" type="text/css" href="lib/bootstrap/css/bootstrap.min.css" />
<script src="lib/jquery/jquery-1.8.3.min.js"></script>
<script src="lib/jquery/jquery.validate.js"></script>
<script src="lib/bootstrap/js/bootstrap.js"></script>
<script src="lib/js/general.js"></script>
<title>Prueba</title>
<script>$(document).ready(function(){$("#__MCFORM__1d67").validate();});</script>
</head>
<body>
<form name="__MCFORM__1d67" id="__MCFORM__1d67" class=" form-inline">
<label for="1077">Prueba input</label>
<input type="text" id="1077" name="prueba_input" class=" input-medium">
</form>
</body>
</html>
Fácil. Todo lo que hice fue crear tres clases, agregarle arrays para guardar objetos, y una función que devuelve strings para finalmente imprimirlos en pantalla. Otra vez, fácil.
Lo otro es que decidí pasar todo parámetro por arrays, casi todo objeto en su método __construct recibirá un array de parámetros. Aparte, tendrán sus respectivos métodos get y set de las distintas propiedades, por si se requieren funciones un poco más avanzadas, y para declarar variables he irles definiendo sus propiedades.
No hay que inventar el agua caliente, aunque tal vez lo estoy haciendo con este framework. Para CSS voy a usar Bootstrap, y para JavaScript por supuesto que voy a utilizar jQuery, nada mas. Los controles fácilmente podrán llevar funciones de javascript, y también voy a usar el plugin validate para la validación de las formas, solo que Velkan lo hará más sencillo.
¿Ajax? por su puesto. Pensé mucho como debía de funcionar Ajax. Y decidí que se iban a poder declarar funciones en el PHP para que el Ajax después sólo ejecutara esas funciones, sera interesante. Sera como programar por eventos en VB.
Comencé por desarrollar un modulo principal que pudiera ir almacenando objetos y renderizarlos en el orden en que se agregan.
Lo llame velkan.php.
Esta clase se encargaría de ir agregando cada objeto. Tendría funciones generales que compartiría con las demás clases.
Parte del objetivo de este proyecto es tener controles que hagan las validaciones de formato, validaciones en formas en campos requeridos y similares. Otro objetivo era hacer combobox dependientes de manera sencilla. Era un obstáculo a superar, pero lo hice.
En un principio, cuando hice los primeros pasos, fue fácil. Cree primero el objeto form, y después el objeto input. Hice una prueba agregando a cada objeto la funcion render(), haciendo que el objeto form buscara en un arreglo todo objeto que tuviera el metodo render(), y lo ejecutaba, de la siguiente forma:
foreach ($this->objs as $obj){
if(method_exists($obj, "render")){
$render.=$obj->render();
}else{
$render.=$obj;
}
}
return $render;
De esta forma es sencillo ir agregando objetos y renderizarlos despues.
La primer prueba fue exitosa. La forma de generar un formulario quedo de la siguiente forma:
<?php
include_once 'velkan.php';
$velkan=new velkan(array("level"=>"","title"=>"Prueba"));
$form=new velkan_form();
$form->add_obj(new velkan_input(array("name"=>"prueba_input","label"=>"Prueba input")));
$velkan->add_obj($form);
$velkan->render();
?>
Esto generará el formulario siguiente:
Con el código siguiente:
<!DOCTYPE html>
<html>
<head>
<meta name="application-name" content="Saicom">
<meta name="author" content="Anwar Garcia">
<meta name="generator" content="Menos Codigo">
<link rel="stylesheet" type="text/css" href="lib/bootstrap/css/bootstrap.min.css" />
<script src="lib/jquery/jquery-1.8.3.min.js"></script>
<script src="lib/jquery/jquery.validate.js"></script>
<script src="lib/bootstrap/js/bootstrap.js"></script>
<script src="lib/js/general.js"></script>
<title>Prueba</title>
<script>$(document).ready(function(){$("#__MCFORM__1d67").validate();});</script>
</head>
<body>
<form name="__MCFORM__1d67" id="__MCFORM__1d67" class=" form-inline">
<label for="1077">Prueba input</label>
<input type="text" id="1077" name="prueba_input" class=" input-medium">
</form>
</body>
</html>
Fácil. Todo lo que hice fue crear tres clases, agregarle arrays para guardar objetos, y una función que devuelve strings para finalmente imprimirlos en pantalla. Otra vez, fácil.
Lo otro es que decidí pasar todo parámetro por arrays, casi todo objeto en su método __construct recibirá un array de parámetros. Aparte, tendrán sus respectivos métodos get y set de las distintas propiedades, por si se requieren funciones un poco más avanzadas, y para declarar variables he irles definiendo sus propiedades.
¿Qué hay del CSS y JavaScript?
No hay que inventar el agua caliente, aunque tal vez lo estoy haciendo con este framework. Para CSS voy a usar Bootstrap, y para JavaScript por supuesto que voy a utilizar jQuery, nada mas. Los controles fácilmente podrán llevar funciones de javascript, y también voy a usar el plugin validate para la validación de las formas, solo que Velkan lo hará más sencillo.
¿Ajax? por su puesto. Pensé mucho como debía de funcionar Ajax. Y decidí que se iban a poder declarar funciones en el PHP para que el Ajax después sólo ejecutara esas funciones, sera interesante. Sera como programar por eventos en VB.
¿Plantillas?
Yes. Podremos crear plantillas para no tener que hacer copiar y pegar cada vez. También tendrá dos archivos de configuración uno donde le decimos varias cosas como los archivos CSS y JS que deba cargar en cada página, y otro donde definimos los mensajes de error y textos en los botones.
Va a quedar muy bien.
Historia de Velkan PHP
Por mucho tiempo he buscado una forma fácil de programar, pero que a la vez no me limite, que me permita hacer lo mismo que haría si lo hiciera parte por parte.
He visto como trabajan muchos Frameworks para PHP, y la verdad es que se ha llegado a un nivel bastante complejo.
Para aprender, debemos entender muchas cosas, no es fácil, aunque se proclame así. Para fabricar algo hay que instalar muchas cosas, y para muchos, que lo que pretenden hacer es poco, resulta demasiado.
He empezado a hacer mi propio Framework. Le he llamado Velkan, que significa perro valiente. Por supuesto que no pienso competir con muchas compañías que han fabricado grandes cosas, ni mucho menos revelarme de alguna forma. Lo único que pretendo es ofrecer algo sencillo, fácil de usar, y una vez que termine construiré un sitio utilizándolo.
Si te interesa, sígueme, valdrá la pena.
Suscribirse a:
Comentarios (Atom)