Tutorial
Tutorial
Tutorial
Presentado a:
Ing. Libardo Pantoja
Presentado por:
Gustavo Salazar Escobar
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
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
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
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.
*/
/*==============================================================*/
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.
<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.
Ahora vamos a nuestro proyecto y vemos que estn creadas nuestras clases
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>
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);
<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);
}
}
?>
Referencias
http://www.pradosoft.com/demos/quickstart/index.php?page=GettingStarted.AboutPrad
o¬heme=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