Está en la página 1de 20

TUTORIAL FRAMEWORK PRADO

DAVID ANDRES QUINTANA GUZMN

UNIVERSIDAD DEL CAUCA


FACULTAD DE INGENIERIA ELECTRONICA Y DE TELECOMUNICACIONES
PROGRAMA INGENIERIA DE SISTEMAS
POPAYN, 31 DE MARZO DE 2014

INTRODUCCION
En este documento realizaremos un CRUD para detallar ms a fondo el framework PRADO.

Qu es un framework?
La palabra inglesa framework define, en trminos generales, un conjunto estandarizado de conceptos,
prcticas y criterios para enfocar un tipo de problemtica particular, que sirve como referencia para
enfrentar y resolver nuevos problemas de ndole similar.
Para aplicaciones web nos estamos refiriendo a una estructura software compuesta de componentes
personalizables e intercambiables para el desarrollo de una aplicacin. En otras palabras, un framework
se puede considerar como una aplicacin genrica incompleta y configurable a la que podemos aadirle
las ltimas piezas para construir una aplicacin concreta.

Qu es PRADO?
Son las siglas de PHP Rapid Application Development Object-oriented en espaol Desarrollo Rpido de
Aplicaciones con Programacin Orientada a Objetos en PHP.
Es una capa de programacin (framework) abierta, orientada a objetos, basada en componentes y
programacin dirigida por eventos, para desarrollos de aplicaciones Web en PHP 5. El principal objetivo
de PRADO es utilizar al mximo la reutilizacin en la programacin Web, es decir, reusar el cdigo propio
o el de otros programadores, lo que nos llevara a un tiempo menor de desarrollo.
Para alcanzar el propsito mencionado, PRADO estipula un protocolo para escribir y usar componentes
para construir una aplicacin Web. Un componente es una pieza de programa que es auto contenido y
puede ser reutilizado con una mnima personalizacin del mismo.
Para facilitar la interaccin con componentes, PRADO implementa el paradigma de la programacin
dirigida por eventos (ayuda a los desarrolladores enfocarse mejor en las necesidades lgicas y reducir
significativamente el cdigo de bajo nivel repetitivo) que permite la delegacin de comportamientos
extensibles a los componentes.
En resumen, desarrollar aplicaciones Web con PRADO principalmente involucra instantneamente tipos
de componentes pre desarrollados, configurarlos mediante sus propiedades, responder a sus eventos
escribiendo funciones manipuladoras de los mismos, y agrupndolos dentro de pginas para la aplicacin.
Es muy similar al Kit de herramientas RAD de Borland Delphi y Microsoft Visual Basic, que son utilizadas
para desarrollar aplicaciones (Interfaces Graficas de Usuarios, GUI) de escritorio.
Caractersticas:

Reutilizacin: Los cdigos que se rigen por el protocolo basado en componentes de PRADO son
altamente reutilizables. Esto beneficia a los equipos de desarrollo a largo plazo, ya que pueden
reutilizar sus trabajos anteriores e integrar otras partes de trabajo con facilidad.
Programacin dirigida por eventos: Las actividades del usuario final, tales como como hacer clic
en un botn de enviar, son capturadas como eventos del servidor permitiendo que los
desarrolladores tengan un mejor enfoque en interacciones del usuario.

Integracin de equipo: La capa de presentacin y la capa lgica son almacenados por separado.
Las aplicaciones en PRADO pueden ser armadas por temas.
Controles Web Potentes: PRADO viene con un conjunto de poderosos componentes que se
ocupan de interfaces de usuario Web. Pginas web altamente interactivas se puede crear con
unas pocas lneas de cdigo.
Fuerte soporte de bases de datos: Desde la versin 3.1, PRADO ha sido equipada con total soporte
de bases de datos, escrita en forma nativa y, por tanto, encaja con el resto del framework PRADO.
De acuerdo a la complejidad de los objetos de negocio, se puede optar por utilizar la PDO simple,
basada en el acceso a los datos, o el ampliamente conocido Active Record, o el mapa completo
de los objetos del negocio SqlMap.
Soporte de AJAX sin fisuras: El uso de AJAX en PRADO nunca ha sido ms fcil con su innovador
Controles Activos (Active Controls). Puede escribir una aplicacin AJAX sin escribir una sola lnea
de cdigo javascript. De hecho, la utilizacin de los Controles Activos, no es muy diferente a la
utilizacin de componentes no-AJAX.
Soporte de I18N y L10N: PRADO incluye soporte completo para crear aplicaciones con mltiples
idiomas y la localizacin.
Compatibilidad XHTML: Las pginas Web generadas por PRADO son compatibles con XHTML.
Albergar trabajos ya existentes: PRADO es un framework genrico, con especial atencin a la capa
de presentacin. No excluye a desarrolladores que hacen uso de la mayora de las actuales
bibliotecas de clase o juegos (kits) de herramientas.

Otras caractersticas: Potente manipulacin de errores /excepciones y registro de mensajes; cache


genrico y memoria cach de salida selectiva; manejo de errores personalizable y localizable;
extensible autentificacin y autorizacin; prevencin de medidas de seguridad, proteccin de cookies,
etc.

Requerimientos:

PHP 5.3.3 o mayor


Debes tener un ambiente de desarrollo PHP, un servidor y un motor de base de datos, en este
caso se va a usar XAMPP porque nos presta los 3 servicios.

TUTORIAL
Instalacin de XAMPP
Este software puede ser descargado gratuitamente en http://www.apachefriends.org/index.html , para
facilidad de manejo lo instalaremos en C:
Ahora debemos agregar una nueva variable path, para esto hacemos lo siguientes pasos:
Inicio>equipo (click derecho)>propiedades

Ahora hacemos click en Configuraciones avanzadas del sistema, y obtendremos un menu, en este men
seleccionaremos la pestaa Opciones Avanzadas y luego Variables de entorno

Ahora en la lista de variables buscamos el variable path y la vamos a modificar aadindole


C:\xampp\php\, esto lo hacemos de la siguiente manera

Instalacin del Framework


El instalador est disponible en http://www.pradosoft.com/download/ , aqu podemos encontrar todas
las versiones de este framework, en este caso, vamos a trabajar con la versin 3.2.1.
Al terminar la descarga tendremos un archivo .zip, este archivo lo debemos llevar a C:\xampp\htdocs y
aqu lo descomprimimos, para mayor facilidad de manejo, a la carpeta que resultante la renombraremos
prado, teniendo como resultado lo siguiente:

Y as hemos terminado la instalacin del framework.

Creacin de un Nuevo Proyecto


La creacin de un nuevo espacio de trabajo en PRADO se hace por medio de la consola, debemos
ubicarnos en el lugar donde queremos guardar nuestro proyecto, en nuestro caso para correr nuestra
aplicacin en el servidor local brindado por XAMPP, debemos gurdalo en la carpeta htdocs.

Para la creacin de nuestro proyecto usamos la siguiente lnea

En este caso biblioteca ser el nombre de nuestro proyecto, el resultado de este comando ser:

Como resultado tendremos lo siguiente:

Dentro de la carpeta del proyecto encontraras dos carpetas (assets y protected), y el index.php, aqu una
breve descripcin de los componentes generados:
Index.php: cdigo de entrada para la aplicacin en Prado. Este fichero es necesario para todas las
aplicaciones.
Assets: almacena archivos privados publicados.
Protected: aqu se almacenarn los archivos que sern usados.
Runtime: se almacena la informacin runtime de la aplicacin, as como su estado, este directorio debe
tener acceso de escritura por el servidor web.
Pages: aqu se almacenan todas las pginas de Prado.
Home.page: Plantilla de la pgina. La misma describe la posicin de los componentes.
Application.xml: contiene la configuracin de la aplicacin, su objetivo es personalizar de una forma
configurable la instancia de aplicacin creada en el script de entrada.
Aqu ya tenemos nuestro proyecto creado, para verificar esto puedes abrir la aplicacin desde tu
navegador preferido, si todo sali bien este sera tu resultado

Creacin del CRUD


Lo primero que debemos hacer es iniciar el APACHE y el mySQL en XAMPP

Base de datos
La base de datos ser creada en mySQL por medio de XAMPP, para ello debemos ingresar a phpmyadmin,
componente que no ayudara con este proceso
Creamos una base de datos llamada biblioteca, la seleccionamos y luego seleccionamos la pestaa SQL,
en el recuadro escribimos el siguiente script, y as obtendremos nuestra base de datos creada
satisfactoriamente.
create table MATERIA (
CODIGO_MATERIA int not null AUTO_INCREMENT,
NOMBRE

varchar(20),

primary key (CODIGO_MATERIA)


);
create table LIBRO (
ISBN
TITULO
RESUMEN

int not null,


varchar(50),
varchar(1000),

CODIGO_MATERIA

int,

primary key (ISBN)


);
alter table LIBRO add constraint FK_RELATIONSHIP_1 foreign key (CODIGO_MATERIA)
references MATERIA (CODIGO_MATERIA) on delete cascade on update cascade;

En la parte izquierda podemos ver cmo queda la base de datos creada.


Ahora para realizar la conexin a la base de datos usaremos el componente Objeto de Acceso a Datos, o
DAO por sus siglas en ingls (Data Access Object), el uso de este componente nos garantiza que el cambio
de motor de almacenamiento de datos no influir en nuestro cdigo PHP.
Para realizar la configuracin debemos modificar el archivo application.xml que se encuentra ubicado en
C:\xampp\htdocs\biblioteca\protected, esta modificacin consta de aadir dos mdulos que se
encargaran de decirle al Active Record a que base de datos debe conectarse, los mdulos a agregar son
los siguientes:
<module id="connectionDB" class="System.Data.TDataSourceConfig">
<database ConnectionString="mysql:host=localhost;dbname=biblioteca">
</database>
</module>
<module class="System.Data.ActiveRecord.TActiveRecordConfig" ConnectionID="connectionDB"
/>
Para representar los registros de los datos debemos de crear dos clases Active Record, estas clases se
extendern de la base de la clase ActiveRecord y debern definir los nombres de propiedades que
coinciden con los nombres de los campos de la tabla correspondiente, esto se har siguiendo lo
explicado a continuacin.
Creacin de clases de Active Record
Primero, para simplificar el manejo, crearemos un nuevo directorio en la carpeta /protected, lo
llamaremos Clase, posteriormente le agregaremos este directorio a la configuracin de la aplicacin.
Para agregar el directorio al path, aadiremos el siguiente cdigo al archivo application.xml.
<paths>
<using namespace="Application.Clases.*" />
</paths>
Teniendo en cuenta los mdulos que se colocaron para configurar la base de datos y la agregacin
del anterior path, el archivo application.xml se encontrara de la siguiente forma:

Para la creacin de estas clases haremos uso del framework, abramos una consola de Windows,
vayamos al directorio del proyecto y ejecutemos el siguiente comando
php C:\xampp\htdocs\prado\framework\prado-cli shell.
Este ser el resultado si fue exitosa la ejecucin:

Para la generacin de cada una de las clases, escribimos el comando


php C:\xampp\htdocs\prado\framework\prado-cli shell .
NOTA: Entre la palabra Shell y el punto hay un espacio.

Para abrir el Shell en la carpeta protected y usamos los respectivos comandos:

generate libro Application.Clases.LibroRecord


generate material Application.Clases.MateriaRecord

Los archivos creados por el framework, LibroRecord y MateriaRecord, quedaran de la siguiente forma
respectivamente:

Para aadir la relacin que existe entre la tabla materia y la tabla libro, debemos agregar las
siguientes lneas al PHP LibroRecord:
public $materia; //tiene MateriaRecord
public static $RELATIONS=array
{
'editorial' => array(self::BELONGS_TO, ''MateriaRecord)
}
Y las siguientes a MateriaRecord:
public $libros=array();// tiene un array de libros

public static $RELATIONS=array


(
'libros' => array(self::HAS_MANY, 'LibroRecord'),
);
Continuando con nuestro proceso, para la gestin de los datos de la base de datos Se debern crear
tanto los .php como los .page.
MATERIA

LIBRO

Como objeto de estudio miraremos a fondo cada uno de los archivos pertenecientes a las materias
Nuevo.page
<%@ MasterClass = "MasterPage"%>
<com:Tcontent ID = "cphCuerpo"> <!--llamamos el contenedor de la masterpage-->
<div align="center" >
<table>

<tr><h1>Agregar Materia</h1></tr>
<tr><td><com:TLabel Text="Nombre"/></td>
<td><com:TTextBox ID="nombretxt" Text=""/><com:TRequiredFieldValidator ID="val1"
ControlToValidate="nombretxt" ErrorMessage="digite el nombre de la materia" Display="Dynamic"/>
</td>
</tr>
<tr><td><com:TButton ID="button" Text="Agregar" OnClick="btn_agregar_click"/></td>
<td><com:TLabel ID="mensaje" Enabled="false" Text=""/></td>
</tr>
</table>
</div>
</com:Tcontent>
Nuevo.php
<?php
class Nuevo extends Tpage {
//Esta funcion inicia al dar click al boton agregar
function btn_agregar_click ($sender, $param){
//si pasamos todas las validacones de la pagina
if($this->isValid){
//creamos un nuevo objeto
$materia= new MateriaRecord();
//guardamos lo datos de la pagina en el objeto
$materia->NOMBRE=$this->nombretxt->Text;
//guardamos llamando la funcion del Active Record
$materia->save();
//redireccionamos
$url=$this->Service->constructUrl('materia.listarMaterias');
$this->Response->redirect($url);
}

}
}
?>
Modificar.page
<%@ MasterClass = "MasterPage"%>
<com:Tcontent ID = "cphCuerpo"> <!--llamamos el contenedor de la masterpage-->
<div align="center" >
<table>
<tr><h1>Modificar Materia</h1></tr>
<tr><td><com:TLabel Text="Nombre"/></td>
<td><com:TTextBox ID="nombretxt"/><com:TRequiredFieldValidator ID="val1"
ControlToValidate="nombretxt" ErrorMessage="digite el nombre de la materia" Display="Dynamic"/>
</td></tr>
<tr><td><com:TButton Text="modificar" Enabled="true" OnClick="btn_modificar_clicked"/>
</td></tr>
</table>
</div>
</com:Tcontent>
Modificar.php
<?php
class Modificar extends Tpage {
private $materia;
//esta funcion inicia al cargar la pagina
public function onInit($param) {
parent::onInit($param);
//obtenemos el id de la URL
$id_materia=(int)$this->Request['id'];
//buscamos una materia por el id
$this->materia=MateriaRecord::finder()->findByPk($id_materia);

//Si no se encuentra la materia lanzamos una excepcion


if($this->materia==null){
throw new THttpException(500,'No existe la materia');
}else{
//si se encuentra la materia cargamos los datos en los objetos de la pagina
$this->nombretxt->Text=$this->materia->NOMBRE;
}
}
//Esta funcion inicia al dar click al boton modificar
function btn_modificar_clicked ($sender, $param){
// si pasamos las validaciones de los objetos de la pagina
if($this->isValid){
//buscamos la materia por id y los guardamos en un objeto
$edit = MateriaRecord::finder()->findByPk($this->materia->CODIGO_MATERIA);
//modificamos los datos del objeto
$edit->NOMBRE=$this->nombretxt->Text;
//guardamos el objeto llamando la funcion del Active Record
$edit->save();
//redireccionamos
$url=$this->Service->constructUrl('materia.listarMaterias');
$this->Response->redirect($url);
} }
}
?>
Eliminar.page
<%@ MasterClass = "MasterPage"%>
<com:Tcontent ID = "cphCuerpo"> <!--llamamos el contenedor de la masterpage-->
<div align="center" >
<table>

<tr><h1>Eliminar Materia</h1></tr>
<tr><td><com:TLabel Text="Nombre"/></td>
<td><com:TLAbel ID="nombretxt"/></td>
</tr>
<tr><td><com:TButton Text="eliminar" Enabled="true" OnClick="btn_eliminar_click"/></td></tr>
</table>
</div>
</com:Tcontent>
Eliminar.php
<?php
class Eliminar extends Tpage {
private $materia;
//Esta funcion inicia para cargar la pagina
public function onInit($param) {
parent::onInit($param);
//extraemos el campo id de la url
$id_materia=(int)$this->Request['id'];
//buscamos la materia identificada con la id
$this->materia=MateriaRecord::finder()->findByPk($id_materia);
//si no encuentra la materia lanzamos una excepcion
if($this->materia==null){
throw new THttpException(500,'No existe la materia');
}else{
//si se encuntra la materia se extraen los valores de los atributos y se ingresan en los label
$this->nombretxt->Text=$this->materia->NOMBRE;
}}
//Esta funcion inicia al dar click al boton eliminar
function btn_eliminar_click ($sender, $param){
//buscamos la materia identificada con la id

$edit = MateriaRecord::finder()->findByPk($this->materia->CODIGO_MATERIA);
//llamamos la funcion heredada del Active record que borra el objeto de la base de datos
$edit->delete();
//redireccionamos a la pagina de consulta
$url=$this->Service->constructUrl('materia.listarMaterias');
$this->Response->redirect($url); } }
?>
listarMaterias.page
<%@ MasterClass = "MasterPage"%>
<com:Tcontent ID = "cphCuerpo"> <!--llamamos el contenedor de la masterpage-->
<div align="center"><h1>Materias</h1>
<table>
<tr ><com:TDataGrid ID="lista_materias" DataKeyField="CODIGO_MATERIA"
AutoGenerateColumns="false" OnEditCommand="editButtonClicked"
OnDeleteCommand="deleteButtonClicked" ItemStyle.BackColor="#BFCFFF"
AlternatingItemStyle.BackColor="#E6ECFF" HeaderStyle.BackColor="5a5389"
HeaderStyle.ForeColor="white">
<com:TBoundColumn HeaderText="Codigo" DataField="CODIGO_MATERIA"/>
<com:TBoundColumn HeaderText="Nombre" DataField="NOMBRE"/>
<com:TButtonColumn HeaderText="Accion" Text="Editar" ButtonType="PushButton"
CommandName="edit" />
<com:TButtonColumn HeaderText="Accion" Text="Borrar" ButtonType="PushButton"
CommandName="delete" />
</com:TDataGrid>
</tr>
</table></div>
<div align="center">
<table><tr align="right"><td><a href="?page=materia.Nuevo" onclick="return true" ><img
src="assets/img/insertar1.gif" width="138" height="26" border="0" name="img5"></a></td>
</tr></table></div>
</com:Tcontent>

listarMaterias.php
<?php
class listarMaterias extends Tpage {
//Esta funcion inicia para cargar la pagina
public function onInit($param) {
parent::onInit($param);
// buscamos todas las materias
$this->lista_materias->DataSource=MateriaRecord::finder()->findAll();
// formateamos los datos
$this->lista_materias->DataBind();
}
//Esta funcion inicia al dar click al boton editar
public function editButtonClicked($sender,$param){
//Obtenemos el item del DataGrid
$item=$param->Item;
// Obtenemos la llave primaria corresspondiente al item
$id=$this->lista_materias->DataKeys[$item->ItemIndex];
//construimos el url
$url=$this->Service->constructUrl('materia.Modificar',array('id'=>$id));
//enviamos
$this->Response->redirect($url);
}
//Esta funcion inicia al dar click al boton borrar
public function deleteButtonClicked($sender,$param)
{
//Obtenemos el item del DataGrid
$item=$param->Item;
// Obtenemos la llave primaria corresspondiente al item
$id=$this->lista_materias->DataKeys[$item->ItemIndex];

//construimos el url
$url=$this->Service->constructUrl('materia.Eliminar',array('id'=>$id));
//enviamos
$this->Response->redirect($url);
}
}
?>
Ahora, para no tener que crear la estructura de cada vista vamos a usar MasterPage, para esto lo
primero que debemos hacer es descargar el template de su gusto, en nuestro caso
http://www.mediafire.com/?cn0ucep7h8e7eg7 .
los archivos contenidos en el .rar que se acaba de descargar l odebemos dsitribuir de la siguiente manera:
la carpeta img la vamos a copiar en el directorio assets y el archivo .tpl lo guardaremos en un directorio
llamado templates que crearemos en el directorio protected, aqu mismo crearemos el siguiente php:
<?php
class MasterPage extends TTemplateControl {
}
?>
Y lo nombraremos Masterpage.php
Ahora debemos aadir los path de eso que acabamos de hacer, como resultado el archivo
application.xml quedara conformado de la siguiente manera:

Por ultimo creamos el respectivo php para la pgina de inicio home.page y agregamos un mensaje de
bienvenida.
<?php
class Home extends Tpage {
}
?>
Home.page
<%@ MasterClass ="MasterPage"%>
<com:TContent ID="cphCuerpo">
<h1>&nbsp;Bienvenidos!!!</h1>
<p>Esta p&aacute;gina ha sido dise&ntilde;ada con el framework Prado, cada una de las
pesta&ntilde;as de la izquierda te direcciona a una vista.
</com:TContent>

REFERENCIAS
http://www.youtube.com/watch?v=iQLAWwqbXuw
http://www.pradosoft.com/documentation/
http://www.lsi.us.es/~javierj/investigacion_ficheros/Framework.pdf
https://www.youtube.com/watch?v=_IImgcAXsg8

También podría gustarte