Tutorial

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 22

TUTORIAL PRADO

COMO ELABORAR DE UN CRUD

Presentado a:
Ing. Libardo Pantoja

Presentado por:
Gustavo Salazar Escobar

UNIVERSIDAD DEL CAUCA


INGENIERIA DE SISTEMAS
POPAYAN-CAUCA

TUTORIAL PRADO
COMO ELABORAR DE UN CRUD
INTRODCION A PRADO
PRADO es una capa de programacin (framework) basada en componentes y
programacin dirigida por eventos, para desarrollo de aplicaciones Web en PHP 5. Las
siglas PRADO significan en espaol Desarrollo Rpido de Aplicaciones con Programacin
Orientada a Objetos en PHP (PHP Rapid Application Development Object-oriented).
El principal objetivo de PRADO es utilizar al mximo la reutilizacin en la programacin
Web. Por reusabilidad, queremos decir no solamente reutilizar el cdigo propio, si no el de
otros programadores de una manera fcil. Lo ltimo dicho es ms importante, ya que evita
el esfuerzo de reinventar nuevamente la rueda y adems posibilita disminuir notablemente
los tiempos de desarrollos. La introduccin al concepto de componentes tiene este
propsito.
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. Nuevos componentes pueden ser creados por una simple composicin de
componentes existentes.
Para facilitar la interaccin con componentes, PRADO implementa el paradigma de la
programacin dirigida por eventos (event-driven) que permite la delegacin de
comportamientos extensibles a los componentes. Las actividades de los usuarios finales,
tales como hacer clic en un botn de un formulario, son capturados como eventos en el
lado del servidor (server events).
Mtodos o funciones deben ser enlazadas a dichos eventos de tal manera que cuando los
eventos sucedan, estos son invocados automticamente para responder a dicho evento.
Comparado con la programacin Web tradicional en la cual los desarrolladores tienen que
tratar directamente con las variables de arreglo POST y GET, la programacin dirigida por
eventos ayuda a los desarrolladores enfocarse mejor en las necesidades lgicas y reducir
significativamente el cdigo de bajo nivel repetitivo (low-level repetitive coding).
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
La siguiente lista es un pequeo resumen de las caractersticas principales de PRADO,
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. Altamente interactivo, se puede crear pginas
web con unas pocas lneas de cdigo. Por ejemplo, utilizando el componente DataGrid, se
puede crear rpidamente una pgina que presenta una tabla de datos que permite la
paginacin, la clasificacin, editar y eliminar filas de los datos.
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 - Uso de AJAX en PRADO nunca ha sido ms fcil con su
innovador Controles Activos (Active Controls) introducidos desde la versin 3.1. Puede
escribir una aplicacin AJAX sin escribir una sola lnea de cdigo javascript. De hecho,
que 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. Por ejemplo, uno puede
usar ADOdb o Creole para tratar con base de datos en su aplicacin PRADO.
Otras caractersticas - Potente manipulacin de errores /excepciones y registro de
mensajes (message logging); cache genrico y memoria cach de salida selectiva;
manejo de errores personalizable y localizable; extensible autentificacin y autorizacin;
prevencin de medidas de seguridad tales como cross-site script (XSS), proteccin de
cookies, etc.
Modelo Vista Controlador
La mayora de frameworks de PHP principalmente se centra en separar la presentacin y
la lgica y promueve el patrn de diseo MVC (modelo-vista-controlador). PRADO logra el
mismo objetivo, naturalmente, al exigir que la lgica se almacene en las clases y la
presentacin en las plantillas.
PRADO hace mucho ms en otros aspectos distintos de MVC. Se llena de mucho espacio
en blanco en la programacin web en PHP, con su paradigma de programacin basada
en componentes, la riqueza de su conjunto de controles Web, su potente soporte de
bases de datos, su flexible manejo de errores y registro de mensajes, y muchos otros.
Instalacin
Previo a la instalacin hay tener instalado xammp/wampp los cuales son servidores
independientes de plataforma, que contienen MySQL, el servidor Apache, intrpretes de
PHP, PERL.
Lo primero que debemos hacer es ir a la pgina principal de Prado
http://www.pradosoft.com y descargar la ltima versin disponible en la pestaa
Download, una vez bajada a tu computador, se mostrara como un archivo .zip, este se

descomprime en la carpeta htdocs de xampp, a la carpeta que resulta de la


descompresin del .zip, por razones de facilidad le cambiamos el nombre
a prado.

Ahora debemos agregar una nueva variable al path, para hacer esto damos click al men
inicio, y le damos click derecho a equipo, y seleccionamos propiedades, nos saldr la
siguiente ventana

Seleccionamos Configuracin avanzada del sistema, aparecer una ventana, donde damos
click a variables de entorno

En la lista de variables del sistema buscamos la variable path y le damos a editar y agregamos
lo que esta subrayado

Creacin de un nuevo proyecto


Para crear una estructura de trabajo en prado, abrimos una consola de Windows y vamos
hasta el directorio donde queremos guardar el proyecto. Para poder correr nuestro proyecto en
nuestro servidor local en este caso xampp, debemos guardarlo en la carpeta htdocs.

Una vez estamos ubicados en el directorio ejecutamos la siguiente lnea en la consola de


Windows

Remplazamos nombre_proyecto por el nombre que le queremos dar al proyecto para este
ejemplo ser empresa Si la lnea est bien escrita aparecern los siguientes mensajes

Ya tenemos el esqueleto de nuestro proyecto, este es la estructura que tiene

Ahora tenemos un esqueleto de la aplicacin PRADO accesible a travs de la URL


http://localhost/demo/index.php que nos lleva a una pgina Web que muestra en ingles
"Bienvenido a PRADO".

Revisemos el esqueleto del proyecto


Definimos como la carpeta principal a "nombre_proyecto" con el nombre del proyecto que
estamos realizando, de esta se desprenden carpetas hijas: "assets", "protected".
"assets", guarda todos los archivos privados que deseas hacer pblicos por instruccin en
el cdigo fuente de tu aplicacin, de manera que sern visibles por todos desde el navegador.

"protected", es el directorio principal de tu aplicacin, principalmente se utiliza para guard ar


scripts privados e informacin que no ser visible para los usuarios finales.
"runtime", no te preocupes por este directorio nunca, pues jams le pondrs una mano
encima pero no por ello debes dejar de saber en qu consiste, "runtime" conserva toda la
informacin generada a la hora de correr la aplicacin, data cacheada, estado, etc. Es
fundamental que este directorio pueda ser escrito por Apache.
"pages", como su nombre lo indica mantiene todas los .pages y .php que generaras una vez
vayas escribiendo tu aplicacin.
Adems de la estructura creara los archivos cuyas funciones se explican a continuacin:
"index.php", este es el script inicial de Prado y es requerido por todas las aplicaciones
escritas usando el Framework de la misma manera es el nico script que es visible por los
usuarios finales y a travs de l se accedan las otras pginas.
"Home.page", es la plantilla que por defecto es devuelta al navegador cuando no hacemos
una peticin especifica, en los archivos .page colocaremos el cdigo HTML en conjunto con
los controles con los que necesitamos interactuar.
"Home.php", es la pgina con las instrucciones que ejecutaremos dependiendo a las
llamadas de los eventos de los controles que coloquemos en los .page, contiene la clase para
dicha pagina as mismo contiene el mtodo que dar respuesta a cualquier evento llamado por
los objetos antes mencionados.
application.xml, contiene la configuracin de la aplicacin. Su principal objetivo es
personalizar de una forma configurable la instancia de aplicacin creado en el script de
entrada.

CREACION DEL CRUD


Ya creado el proyecto, procederemos a crear el CRUD para 2 tablas: empleado,
departamento.

Base de datos
Para los CRUDS vamos a utilizar una base de datos que tendr el siguiente esquema

Xampp ya nos provee de un motor de base de datos llamado MySql, podemos acceder a el
escribiendo en el navegador http://localhost/phpmyadmin/, aqu podremos crear nuestra base
de
datos, para nuestro ejemplo la llamamos empresa y ejecutamos el siguiente script.
/*==============================================================*/
/* DBMS name:
MySQL 5.0
*/
/* Created on: 24/09/2014 09:29:23 a.m.
*/
/*==============================================================*/

drop table if exists DEPARTAMENTO;


drop table if exists EMPLEADO;
create table DEPARTAMENTO
(
COD_DEP
int not null auto_increment,
NOM_DEP
varchar(50),
primary key (COD_DEP)
);
create table EMPLEADO
(
COD_EMP
int not null auto_increment,
COD_DEP
int,
NOM_EMP
varchar(50),
FECHANAC_EMP
date,
SALARIO_EMP
float,
primary key (COD_EMP)
);
alter table EMPLEADO add constraint FK_RELATIONSHIP_1 foreign key (COD_DEP)

references DEPARTAMENTO (COD_DEP) on delete restrict on update restrict;

Estableciendo conexin con la Base de Datos


Para utilizar la base de datos que acabamos de crear, primero tenemos que establecer una
conexin con ella.
Vamos a utilizar Data Access Objects (DAO) para abstraer los mecanismos de acceso a
datos. Si en
el futuro se decide utilizar un DBMS diferente (por ejemplo, PostgreSQL, Oracle, etc.) para
almacenar nuestros datos, slo tenemos que cambiar el nombre de la fuente de base de datos
y
podemos mantener nuestro cdigo PHP intacto.
Modificamos nuestro archivo de configuracin de la aplicacin protected/ appli cation.xml
mediante la insercin de las siguientes lneas, que le dice a Active Record cmo conectarse a
la
base de datos recin creada:
<modules>
<module id="db" class="System.Data.TDataSourceConfig">
<database ConnectionString= "mysql:host=localhost;dbname=libreria" username="root"
passw ord="" />
</module>
<module class="System.Data.ActiveRecord.TActiveRecordConfig" ConnectionID="db" />
</modules>

La configuracin anterior muestra que estamos aadiendo dos mdulos a nuestra aplicacin.
El
TDataSourceConfig mdulo est configurado con la cadena de conexin
"mysql:host=localhost;dbname=libreria" username="root" password="" que apunta a
nuestra
base de datos. Esta conexin es utilizada por el TActiveRecordConfig mdulo que es
requerido por
Active Record.

Creacin de clases de Active Record


Tenemos que crear dos Active Record clases, LibroRecord y EditorialRecord , para
representar los
registros de datos de los Libro y la Editoriales respectivamente. Clases de Active Record que
se
extienden desde la base de la clase ActiveRecord , y debe definir los nombres de propiedades
que
coinciden con los nombres de los campos de la tabla correspondiente.
Para organizar mejor nuestros directorios, creamos una nueva carpeta Clases en el directorio
protected de nuestro proyecto, para almacenar los archivos de clase. Tambin modificar
nuestra
configuracin de la aplicacin mediante la insercin de las siguientes lneas. Es equivalente a
agregar el directorio protected/Clases al include_path de PHP, lo que nos permite uti lizar las
clases.

<paths>
<using namespace="Application.Clases.*" />
</paths>

En lugar de escribir las clases de forma manual, vamos a utilizar la herramienta de lnea de
comandos PRADO, para generar las clases.
Tambin modificamos la configuracin en protected/ application.xml con la siguiente lnea de
cdigo y as poder utilizar el servicio de prado wsat (Web Site Administration Tool) que es
una herramienta de desarrollo que permite realizar tareas tediosas de un proyecto de PRADO
a travs de una GUI.
<service id="wsat" class="System.Wsat.TWsatService" Password="123" />
Para hacer uso de l Active record abrimos el Web Site Administration Tool ingresando la
siguiente url en nuestro navegador http://localhost/empresa/index.php?wsat=TWsatHome.

Luego de haber ingresado a la pgina escogemos la opcin AR Clases que se encuentra


en un men en la parte izquierda de la pgina y aparecer el siguiente formulario:

En el campo otput Folder solo dejamos Application.Clases y en el campo Table Name


dejamos el * ya que este creara los Records de todas las tablas de lavase de datos .
Le damos click en generar y aparecer un mensaje de verificacin de la creacin de la los
Records.

Ahora vamos a nuestro proyecto y vemos que estn creadas nuestras clases

En el archivo EmpleadoRecord.php vemos las siguientes lneas de cdigo

Aadimos las siguientes lneas de cdigo

Una vez establecida la conexin y creadas las clases records, el objetivo es gestionar los
datos de la
base de datos, para ello se debe crear una estructura similar a esta

Donde se debern crear tanto las paginas .page como las .php de cada uno de los mtodos
del
crud.
Esto es lo que llevara cada pgina para departamento y sera similar para empleado:
listarDpto.page
l
<div align="center">
<h1>Departamentos</h1>
<table>
<com:TForm>
<tr >
<com:TDataGrid ID="lista_dptos"
DataKeyField="COD_DEP"
AutoGenerateColumns="false"
OnEditCommand="editButtonClicked"
OnDeleteCommand="deleteButtonClicked"
ItemStyle.BackColor="#BFCFFF"
AlternatingItemStyle.BackColor="#E6ECFF"
HeaderStyle.BackColor="5a5389"
HeaderStyle.ForeColor="white">
<com:TBoundColumn
HeaderText="Codigo"
DataField="COD_DEP"
/>
<com:TBoundColumn
HeaderText="Nombre"
DataField="NOM_DEP"
/>
<com:TButtonColumn
HeaderText="Accion"
Text="Editar"
ButtonType="PushButton"
CommandName="edit" />
<com:TButtonColumn
HeaderText="Accion"
Text="Borrar"
ButtonType="PushButton"
CommandName="delete" />
</com:TDataGrid>
</tr>

</table>
</com:TForm>
</div>
<div align="center">
<table>
<tr align="right">
<td>
<a href="?page=departamento.dptoNuevo"
onclick="return true" ><img src="assets/img/insertar1.gif" width="138" height="26" border="0"
name="img5"></a>
</td>
</tr>
</table>
</div>
listarDpto.php
<?php
class listarDpto extends Tpage {
//Esta funcion inicia para cargar la pagina
public function onInit($param) {
parent::onInit($param);
// buscamos todas los dptos
$this->lista_dptos->DataSource=DepartamentoRecord::finder()->findAll();
// formateamos los datos
$this->lista_dptos->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_dptos->DataKeys[$item->ItemIndex];
//construimos el url
$url=$this->Service>constructUrl('departamento.dptoModificar',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_dptos->DataKeys[$item->ItemIndex];
//construimos el url
$url=$this->Service->constructUrl('departamento.dptoEliminar',array('id'=>$id));
//enviamos
$this->Response->redirect($url);
}
}
?>
dptoNevo.page
<div align="center" >
<table>
<com:TForm>
<tr>
<h1>Agregar Departamento</h1>
</tr>
<tr>
<td><com:TLabel Text="Codigo"/>
</td>
<td>
<com:TTextBox ID="idtxt" Text=""/>
<com:TRequiredFieldValidator ID="val1"
ControlToValidate="idtxt"
ErrorMessage="digite el codigo del
departamento"
Display="Dynamic"/>
</td>
</tr>
<tr>
<td><com:TLabel Text="Nombre"/>
</td>
<td>
<com:TTextBox ID="nombretxt" Text=""/>
<com:TRequiredFieldValidator ID="val2"
ControlToValidate="nombretxt"
ErrorMessage="digite el nombre "
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>
</com:TForm>
</div>

dptoNuevo.php

dptoModificar.php
<?php
class dptoModificar extends Tpage {
private $dpto;
//esta funcion inicia al cargar la pagina
public function onInit($param) {
parent::onInit($param);
//obtenemos el id de la URL
$id_dpto=(int)$this->Request['id'];
//buscamos un departamneto por el id
$this->departamento=DepartamentoRecord::finder()->findByPk($id_dpto);

//Si no se encuentra la editorial lanzamos una excepcion


if($this->dpto==null){
throw new THttpException(500,'No existe el departamento');
}else{
//si se encuentra la editorial cargamos los datos en los objetos de la pagina
$this->idtxt->Text=$this->departamento->COD_DEP;
$this->nombretxt->Text=$this->departamento->NOM_DEP;
}
}
//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 editorial por id y los guardamos en un objeto
$dpto = DepartamentoRecord::finder()->findByPk($this>departamento->COD_DEP);
//modificamos los datos del objeto
$dpto->COD_DEP=$this->idtxt->Text;
$dpto->NOM_DEP=$this->nombretxt->Text;
//guardamos el objeto llamando la funcion del Active Record
$dpto->save();
//redireccionamos
$url=$this->Service->constructUrl('departamento.listarDpto');
$this->Response->redirect($url);
}
}
}
?>
dptoModificar.page
<div align="center" >
<table>
<com:TForm>
<tr><h1>Modificar Departamento</h1>
</tr>
<tr>
<td>
<com:TLabel Text="Codigo"/>
</td>
<td>
<com:TTextBox ID="idtxt"/d>
<com:TRequiredFieldValidator ID="val1"
ControlToValidate="idtxt"
ErrorMessage="digite el codigo del
departamento"
Display="Dynamic"/>
</td>
</tr>
<tr>
<td>
<com:TLabel Text="Nombre"/>
</td>

<td>
<com:TTextBox ID="nombretxt"/>
<com:TRequiredFieldValidator ID="val2"
ControlToValidate="nombretxt"
ErrorMessage="digite el nombre"
Display="Dynamic"/>
</td>
</tr>
<tr>
<td>
<com:TButton
Text="modificar"
Enabled="true"
OnClick="btn_modificar_clicked"/>
</td>
</tr>

</table>
</com:TForm>
</div>

dptoEliminar.page
<div align="center" >
<table>
<com:TForm>
<tr><h1>Eliminar Departamento</h1>
</tr>
<tr>
<td>
<com:TLabel Text="Codigo"/>
</td>
<td>
<com:TLAbel ID="idtxt"/>
</td>
</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>
</com:TForm>

</div>
dptoEliminar.php
<?php
class dptoEliminar extends Tpage {
private $dpto;
//Esta funcion inicia para cargar la pagina
public function onInit($param) {
parent::onInit($param);
//extraemos el campo id de la url
$id_dpto=(int)$this->Request['id'];
//buscamos la editoria identificada con la id
$this->departamento=DepartamentoRecord::finder()->findByPk($id_dpto);
//si no encuentra el departamento lanzamos una excepcion
if($this->departamento==null){
throw new THttpException(500,'No existe el departamento');
}else{
//si se encuntra el departamento se extraen los valores de los atributos y se ingresan
en los label
$this->idtxt->Text=$this->departamento->COD_DEP;
$this->nombretxt->Text=$this->departamento->NOM_DEP;
}
}
//Esta funcion inicia al dar click al boton eliminar
function btn_eliminar_click ($sender, $param){
//buscamos la editoria identificada con la id
$dpto = DepartamentoRecord::finder()->findByPk($this>departamento->COD_DEP);
//llamamos la funcion heredada del Active record que borra el
objeto de la base de datos
$edit->delete();
//redireccionamos a la pgina de consulta
$url=$this->Service->constructUrl('departamento.listarDpto');
$this->Response->redirect($url);
}
}
?>

Esta es la vista final de la pagina

Esta es la vista de agregar empleado

Esta es la vista de modificar al haber seleccionado un empleado de la lista de empleados

Esta es la vista de eliminar cuando se ha escogido un empleado de la lista de empleados

Referencias
http://www.pradosoft.com/demos/quickstart/index.php?page=GettingStarted.AboutPrad
o&notheme=true&lang=es
http://www.pradosoft.com/demos/quickstart/
http://www.pradosoft.com/demos/blog-tutorial/
http://www.pradosoft.com/documentation/
http://www.xisc.com/
http://pradolabs.blogspot.com/
Edwar Alejandro Giraldo,PRADO

También podría gustarte