Académique Documents
Professionnel Documents
Culture Documents
Modelo-Vista-Controlador (Model-View-Controller) es un patrn de desarrollo que separa la parte lgica de una aplicacin de su presentacin. Bsicamente sirve para separar el lenguaje de programacin del HTML lo mximo posible y para poder reutilizar componentes fcilmente.
Modelo: representa las estructuras de datos. Tpicamente el modelo de clases contendr funciones para consultar, insertar y actualizar informacin de la base de datos.
Vista: La vista consiste de los pequeos trozos de la aplicacin relacionados con la interfaz grfica del usuario. Usualmente esta se realiza en HTML. Una
vista puede ser una pgina web o una parte de una pgina.
Controlador: Acta como intermediario entre el Modelo, la Vista y cualquier otro recurso necesario para asegurar que los datos correctos se muestren en la pgina.
3
Zend Framework utiliza la arquitectura ModeloVista-Controlador (MVC). Esto se utiliza para separar las diferentes partes de su aplicacin y facilitar al mismo tiempo el desarrollo y mantenimiento de las mismas.
Solicitud
examina la solicitud y determina los componentes clave de la URL
IndexController.php ErrorController.php AlbumController.php
Controlador Frontal
Router
Modelo
Respuesta
Vista
Layout
Pginas necesarias
Las siguientes pginas sern necesarias:
Pgina de inicio
Mostrar la lista de los lbum y proporcionar vnculos para editarlos y eliminarlos. Tambin se proporcionar un vnculo para poder agregar nuevos lbum. Esta pgina proporcionar un formulario para agregar un nuevo lbum.
Editar un lbum
Eliminar un lbum
pero esta aplicacin no es muy grande as que no nos preocuparemos por ellos. De manera predeterminada los controladores de Zend Framework reservan una accin especial llamada index que se ejecutar como la accin por omisin.
Es decir, para una URL como http://localhost/testzf/public/noticias/ La accin index dentro del controlador noticias ser ejecutada. Tambin existe un controlador predeterminado que se ejecuta si omitimos el nombre del controlador.
Como tenemos cuatro pginas que trabajan sobre los lbums, las agruparemos en un nico controlador como cuatro acciones. Utilizaremos el controlador por omisin y las cuatro acciones sern:
Modificar un lbum
Eliminar un lbum
Index
Index
modificar
eliminar
10
Configurando el controlador
Ahora estamos listos para generar el controlador. En Zend Framework, el controlador es una clase que debe llamarse :
Debe iniciar con una letra mayscula. Esta clase debe residir en un archivo llamado Controller.php
{Nombredelcontrolador}Controller. Este archivo debera estar dentro de la carpeta application/controllers. Nuevamente, {Nombredelcontrolador} debe iniciar con una mayscula y todas las dems letras debern ser minsculas. Cada accin es una funcin pblica dentro de la clase del 11 controlador y que debe nombrarse por {nombredelaaccion}Action.
En este caso, {nombredelaaccion}debe iniciar con una letra minscula y nuevamente debe completarse nicamente con letras minsculas. Tambin se permiten los nombre con maysculas y minsculas tanto en los nombres de los controladores como de las acciones, pero existen reglas especiales que deseamos que comprenda antes de utilizar ese tipo de nomenclatura. Primero verifique que la documentacin muestre la clase del controlador que se llamar IndexController y ser definida en la ruta del siguiente archivo : testzf/application/controllers/IndexController.php.
12
<?php class IndexController extends Zend_Controller_Action { public function init() { /* inicializa la accin del controlador aqui */ } public function indexAction() { // action body } function agregarAction() { } function modificarAction() { } function eliminarAction() { } } // fin de la clase 13
Ahora hemos establecido las cuatro acciones que queremos utilizar. Ellas todava no funcionarn hasta que establezcamos las vistas. Las URLs para cada accin son:
URL http://localhost/testzf/public/index/index http://localhost/testzf/public/index/agregar Accin IndexController::indexAction() IndexController::agregarAction()
http://localhost/testzf/public/index/modificar http://localhost/testzf/public/index/eliminar
IndexController::modificarAction() IndexController::eliminarAction()
Con esto tenemos un enrutador trabajando y las acciones se han establecido para cada pgina de nuestra aplicacin. Es el momento de construir las vistas(views).
14
Configurando la vista
El componente de las vistas de Zend Framework es llamado, de manera poco sorprendente, Zend_View. Este componente nos permite separar el cdigo que muestra las pginas del cdigo en el que se encuentran las funciones de accin.
El uso bsico de Zend_View es: $vista = new Zend_View(); $vista-> setScriptPath('/trayectoria/archivos_de_vista'); echo $vista->render('vistaScript.php');
Fcilmente podemos ver que si colocamos este cdigo directamente en cada una de las funciones de accin estaremos repitiendo cdigo estructural demasiado aburrido que no es interesante para la accin.
15
En su lugar deberamos hacer la inicializacin de la vista en cualquier otro lado y despus acceder nuestro objeto de vista ya inicializado dentro de cada funcin de accin. Los diseadores de Zend Framework previeron este tipo de problemas, la solucin es construir un ayudante de accin (helpers) para nosotros.
Zend_Controller_Action_Helper_ViewRenderer
Este se preocupa de inicializar una propiedad view (la vista $this->view) para nuestro uso y tambin le dar el formato al layout de la vista.
16
El controlador frontal enviar automticamente el encabezado seguido del contenido y al final la funcin dispatch.
17
Para integrar la vista dentro de nuestra aplicacin todo lo que necesitamos hacer es crear algunos archivos de vista y verificar que funcionen. El archivo Indexcontroller.php ya existe en la carpeta application/controller abrimos y agregamos el contenido especfico a la accin (como es el ttulo de la pgina) dentro de las acciones del controlador. (IndexController.php)
public function indexAction() { $this->view->title = "Mis Albums"; } function agregarAction() { $this->view->title = "Agregar un album"; } function modificarAction() { $this->view->title = "Modificar un album"; } function eliminarAction() { $this->view->title = "Eliminar un album"; }18 }
En cada funcin, asignamos un valor distinto a la variable title de la propiedad vista y eso es Todo.
Observe que el despliegue real no se puede hacer en este momento ste lo realiza el controlador frontal justo al final del proceso dispatch. Ahora necesitamos agregar cuatro vistas para nuestra aplicacin. Estos archivos se conocen como layouts de vista o plantillas, como se vio anteriormente, cada archivo de plantilla lleva el nombre de la accin correspondiente y tiene la extensin .phtml.
19
El archivo debe estar en una subcarpeta que llevara el nombre del controlador correspondiente, as que los cuatro archivos son:
testzf/application/views/scripts/index/index.phtml
<html> <head> <title><?php echo $this->escape($this->title); ?> </title> </head> <body> <h1><?php echo $this->escape($this->title); ?></h1> </body> </html>
20
testzf/application/views/scripts/index/agregar.phtml
<html> <head> <title><?php echo $this->escape($this->title); ?> </title> </head> <body> <h1><?php echo $this->escape($this->title); ?></h1> </body> </html> testzf/application/views/scripts/index/modificar.phtml <html> <head> <title><?php echo $this->escape($this->title); ?> </title> </head> <body> <h1><?php echo $this->escape($this->title); ?> </h1> </body> 21 </html>
Testzf/application/views/scripts/index/eliminar.phtml <html> <head> <title><?php echo $this->escape($this->title); ?> </title> </head> <body> <h1><?php echo $this->escape($this->title); ?></h1> </body> </html>
Pruebe cada controlador/accin navegando en las URLs mostradas con anterioridad; se debern desplegar los cuatro ttulos de las pginas (uno a la vez) dentro del navegador de Web.
22
Pantallas
1.- localhost/testzf/public/index
2.- localhost/testzf/public/index/agregar
Zend_Layout nos permite mover el cdigo comn de encabezados y pies de pgina dentro de un guin de esquema (layout) que integrar el cdigo de la vista especfico para la accin que se est ejecutando. Los siguientes cambios sern necesarios. Primero, debemos decidir donde colocar los layouts de los esquemas. El lugar recomendado es dentro de la carpeta application, as que deber crear una carpeta llamada layouts para almacenar los esquemas dentro de la carpeta testzf/ application.
Ahora debemos indicarle esta ubicacin al componente Zend_Layout 24 dentro del archivo de configuracin, as que abrimos el archivo application.ini que se encuentra en testzf/application/configs:
25
Ahora necesitamos un cdigo de esquema para la vista. De manera predeterminada, se creara el archivo guin que se llamara layout.phtml que residir en la carpeta layouts. El cdigo se ve de la siguiente manera:
<!DOCTYPE html PUBLIC "// W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional. dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv=Content-Type content="text/html;charset=ut-f8/> <title><?php echo $this->escape($this->title); ?></title> </head> <body> <div id="contenido> <h1><?php echo $this->escape($this->title); ?></h1> <?php echo $this->layout()->content; ?> </div> </body> </html> 26
Una vez realizado el archivo layout.phtml elimine el contenido de los archivos dejando las etiquetas <html><body></body></html> de index.phtml, agregar.phtml, modificar.phtml y eliminar.phtml. Puede probar las 4 URLs nuevamente y no debe encontrar ninguna diferencia de la ltima vez que las prob! La diferencia clave es que esta vez el trabajo se realiza dentro del componente de esquema.
27
Estilo (css)
Creamos nuestro propio ayudante de vista, llamado baseUrl() que recolecta la informacin que requerimos del objeto solicitado. Esto nos proporciona el pedazo de la URL que no conocemos. Los ayudantes de vista se almacenan en la carpeta application/views/helpers y deben llevar el nombre {Nombredeayudante}.php (la primera letra debe ser mayscula) y la clase dentro de ese archivo se debe llamar Zend_Controller_Helper_{Nombredeayudante} (nuevamente, primera letra en mayscula). Debe haber una funcin dentro de la clase llamada {nombredeayudante}() (primera letra en minscula no lo olvide!).
28
Una funcin no muy complicada, verdad? Simplemente recuperamos una instancia del controlador frontal y devolvemos la salida de la funcin miembro getBaseUrl(). Necesitamos agregar el archivo CSS a la seccin <head> del archivo application/layouts/layout.phtml
29
<head> <meta http-equiv=Content-Type content="text/html;charset=ut-f8 /> <title><?php echo $this-> escape($this->title); ?></title> <link rel="stylesheet" type="text/css" media="screen href="<?php echo /* Tablas */ $this-> baseUrl();?>/css/site.css" /> th { </head> Textalign: left; ... Finalmente, necesitamos creamos una } carpeta dentro de testzf/public llamada css td, th { Paddingright:5px; y agregamos el archivo site.css. } /* Estilo para el formulario */ body,html { form dt { margin: 0 5px; width: 100px; Fontfamily:Verdana,sansseri display: block; f; float: left; } clear: left; h1 { } Fontsize:1.4em; form dd { Marginleft:0; color: #008000; float: left; } } a{ form #submitbutton { 30 color: #008000; Marginleft:100px; } }
Cuando la aplicacin web este completa el css har que se muestre con el siguiente estilo (site.css)
31
BASE DE DATOS
32
Ahora que hemos separado el control de la aplicacin de las vistas, es tiempo de ver la seccin del modelo de nuestra aplicacin. Recuerde que el modelo es la parte que concierne al propsito central de la aplicacin (las tan nombradas - reglas del negocio) y por lo tanto, en nuestro caso, la que concierne a la base de datos. Haremos uso de la clase Zend_Db_Table de Zend Framework que se utiliza para buscar, insertar, actualizar y eliminar renglones de las tablas de una base de datos.
33
Configuracin
Configuracin Para utilizar Zend_Db_Table, necesitamos decir que base de datos utilizar as como un nombre de usuario y una clave o contrasea. Como preferimos no escribir en el cdigo de nuestra aplicacin esta informacin, utilizaremos un archivo de configuracin para almacenar esta informacin. Zend Framework incluye la clase Zend_Config para proporcionar un acceso flexible orientado a objetos todos los archivos de configuracin que pueden ser archivos ini o un archivo xml. Nosotros utilizaremos un archivo con formato ini llamado application.ini que se encuentra el la carpeta application/configs: (agregar el cdigo que esta 34 encerrado en un ovalo).
testzf/application/configs/application.ini
Nota:
Los identificadores host, username, password y dbname deben conservar estos nombre ya que las bibliotecas de acceso a la base de datos lo reconocer de esta forma. Por ejemplo, si cambia db.params.username por db.params.usuario, obtendr un serie de errores y su aplicacin no funcionar. 35
Obviamente, debe colocar su nombre de usuario, su clave y nombre de la base de datos. Para aplicaciones de mayor tamao con muchos archivos de configuracin podra decidir en crear una carpeta adicional, por ejemplo application/config y almacenar all todos sus archivos de configuracin, sin mezclarlos con los dems. El uso de Zend_Config es muy fcil: $config = new Zend_Config_Ini('config.ini', {nombredeseccion});
Vea que en este caso, Zend_Config_Ini slo carga la seccin {nombredeseccion} a partir del archivo 'config.ini', no todas las secciones (aunque se pueden cargar todas las secciones si as lo desea). 36
Configuracin de Zend_Db_Table
Para utilizar Zend_Db_Table, necesitamos pasarle la configuracin de la base de datos que acabamos de cargar. Para esto, tenemos que crear una instancia de Zend_Db y despus registrarla con la funcin esttica Zend_Db_Table:: setDefaultAdapter(). Nuevamente, esto lo realizamos dentro del archivo de inicio: testzf/public/index.php.
Introducimos el cdigo que se encuentra en la siguiente diapositiva encerrado en un ovalo.
37
38
Con esto agregamos, la autocarga de clases que trae ZendFramework, Zend_Loader_Autolader::getInstance() nos incluye las clases sin tener que cargarlas explcitamente con Zend_Loader::loadClass(), includes o require cuando las necesitemos, Zend Framework lo hace automticamente por nosotros.
protected function _initView() Insertar este cdigo en { Bootstrap.php $view = new Zend_View(); $view->setEncoding('UTF-8'); $view->doctype('XHTML1_STRICT'); $view->headTitle('Mi Primera Aplicacion en Zend Framework'); $view->headMeta()->appendHttpEquiv( 'Content-Type', 'text/html;charset=utf-8' ); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper( 'ViewRenderer' ); $viewRenderer->setView($view); return $view; } 39
Creacin de la tabla
Creamos la base de datos llamado discos y utilizando la instruccin MySQL para crear la tabla albums es: CREATE TABLE albums ( id int(11) NOT NULL auto_increment, artista varchar(100) NOT NULL, titulo varchar(100) NOT NULL, PRIMARY KEY (id) ); Ejecute esta instruccin en un cliente de MySQL tal como phpMyAdmin o el cliente estndar de la lnea de comandos de MySQL (recuerde que debe crear la base de datos y establecer los permisos de acceso para su 40 cuenta de usuario).
41
El Modelo
Zend_Db_Table_Abstract es una clase abstracta, as que necesitamos derivar nuestra clase que es especfica para manipular albums. No importa el nombre que le demos a nuestra clase, pero tendr ms sentido si le damos el mismo nombre que a nuestra tabla de la base de datos. Por lo tanto, nuestra clase se llamar Application_Model_Albums ya que el nombre de nuestra tabla es albums.
42
Para indicarle a Zend_Db_Table_Abstract el nombre de la tabla que manejar, tenemos que establecer la propiedad protegida $_name para que contenga el nombre de la tabla. Adicionalmente, Zend_Db_Table_Abstract asume que la tabla tiene una llave primaria llamada id que se incrementa automticamente desde la base de datos.
No es tan complicado verdad?! Afortunadamente para nosotros, nuestras necesidades son muy simples y Zend_Db_Table_Abstract proporciona toda la funcionalidad que necesitamos. Sin embargo, si requiere de funcionalidad especfica para manejar su modelo, entonces esta es la clase donde debe colocarla. Tambin puede indicarle a Zend_Db_Table_Abstract acerca de tablas relacionadas y que pueda recuperar datos relacionados de diferentes tablas tambin.
44
Despliegue de Al bums
Ahora que hemos establecido la configuracin y la informacin de la base de datos, nos podemos sumergir en la cuestin de la aplicacin y desplegar algunos albums. Esto se realiza dentro de la clase IndexController e iniciamos con el despliegue de algunos albums almacenados en la tabla con la funcin indexAction(): testzf/application/controllers/IndexController.php public function init() { /* Initialize action controller here */ } function indexAction() { $this->view->title = "Mis Albums"; $albums = new Application_Model_Albums(); $this->view->albums = $albums->fetchAll(); } ... 45
La funcin fetchAll() devolver un arreglo de renglones en Zend_Db_Table_Rowset que nos permite iterar sobre los renglones obtenidos desde el archivo del layout de vista para esta accin. Podemos escribir lo siguiente en el archivo index.phtml:
testzf/application/views/scripts/index/index.phtml
<p><a href="<?php echo $this-> url(array('controller'=>'index', 'action'=>'agregar')); ?>">Agregar nuevo album</a></p> <table> <tr> <th>Título</th> <th>Artista</th> <th> </th> </tr> <?php foreach($this->albums as $album) : ?> <tr> <td><?php echo $this->escape($album->titulo);?></td> <td><?php echo $this->escape($album->artista);?></td> <td>
46
<a href="<?php echo $this->url(array('controller'=>'index', 'action'=>'modificar', 'id'=>$album->id));?>">Modificar</a> <a href="<?php echo $this->url(array('controller'=>'index', 'action'=>'eliminar', 'id'=>$album->id));?>">Eliminar</a> </td> </tr> <?php endforeach; ?> </table>
Lo primero que hacemos es crear un vnculo a Agregar nuevo album. El ayudante de vista url() se proporciona por el entorno de Zend y ayuda a crear vnculos que contengan la URL de base de manera correcta. Simplemente pasamos en un arreglo los parmetros que necesitamos y el resto funcionar como se requiere. Entonces creamos una tabla en html para desplegar el ttulo de cada album, artista y proporcionar vnculos que permitan modificar o eliminar ese registro.
47
Se utilizar un ciclo foreach() estndar para iterar sobre la lista de los albums, y utilizamos de forma alternada un punto y coma y endforeach; esto es ms fcil de depurar que tratar de empatar parntesis o corchetes. Nuevamente, el ayudante de vista url() se utiliza para crear los vnculos a modificar y eliminar.
La URL http://localhost/testzf/public deber mostrar una excelente lista de (dos) albums, algo como esto:
48
testzf/application/models/Albumform.php
49
<?php class Application_Model_Albumform extends Zend_Form { public function __construct($options = null) { parent::__construct($options); $this->setName('album'); $id = new Zend_Form_Element_Hidden('id'); $artista = new Zend_Form_Element_Text('artista'); $artista->setLabel('Artista') /* pone la etiqueta Artista */ ->setRequired(true) /* Hace este elemento requerido */ ->addFilter('StringTrim') /* asegurando que el elemento tenga algn valor cuando sea requerido. */ ->addValidator('NotEmpty'); $titulo = new Zend_Form_Element_Text('titulo'); $titulo->setLabel('Titulo') ->setRequired(true) ->addFilter('StripTags') /* eliminar cdigo HTML no deseado */ ->addFilter('StringTrim') /* espacios innecesarios. */ ->addValidator('NotEmpty'); $envio = new Zend_Form_Element_Submit('envio'); $envio->setAttrib('id', 'submitbutton'); $this->addElements(array($id, $artista, $titulo, $envio)); 50 } }
Dentro del constructor de AlbumForm, creamos cuatro elementos para id, artista, titulo, y el botn de envi. Para cada elemento establecemos varios atributos, que incluyen las etiquetas que se deben desplegar. Para los elementos de texto agregamos dos filtros, StripTags y StringTrim para eliminar cdigo HTML no deseado y espacios innecesarios. Tambin decimos que esos elementos son requeridos y agregamos un validador NotEmpty para asegurar que el usuario realmente inserta la informacin que se requiere. Ahora necesitamos obtener el formulario, desplegarlo y procesarlo con el envo. Esto se hace dentro de agregarAction():
51
Testzf/ application/controllers/IndexController.php ... function agregarAction() { $this->view->title = "Agregar un Album"; $form = new Application_Model_Albumform(); $form->envio->setLabel('Agregar'); $this->view->form = $form; if ($this->_request->isPost()) { $formData = $this->_request->getPost(); if ($form->isValid($formData)) { $albums = new Application_Model_Albums(); $row = $albums->createRow(); $row->artista = $form->getValue('artista'); $row->titulo = $form->getValue('titulo'); $row->save(); $this->_redirect('/'); } else { $form->populate($formData); } } } ... 52
$albums = new Application_Model_Albums(); $row = $albums->createRow(); $row->artista = $form->getValue('artista'); $row->titulo = $form->getValue('titulo'); $row->save(); $this>_redirect('/');
Si el formulario es vlido, entonces hacemos una instancia del modelo de clase Application_Model_Albums y utilizamos createRow() para generar un rengln vaco que despus llenaremos con los datos artista y titulo antes de guardarlo. Despus de guardar el rengln con el nuevo album, redireccionamos utilizando el mtodo _redirect() del controlador, que nos llevar a la pgina de inicio.
54
} else { $form->populate($formData); }
Si los datos en el formulario no son vlidos, entonces volveremos a llenar el formulario con los datos que insert el usuario y desplegamos la pgina otra vez. Ahora necesitamos darle formato al formulario en el layout de la vista agregar.phtml:
testzf/application/views/scripts/index/agregar.phtml
<?php echo $this->form ;?>
Como puede ver, darle formato a un formulario es muy simple ya 55 que el formulario conoce la manera en que se debe desplegar l mismo.
Modificar un lbum
La modificacin de los datos de un album es casi idntica a agregar uno, as que el cdigo es muy similar: testzf/application/controllers/IndexController.php ... function modificarAction() { $this->view->title = "Modificar un Album"; $form = new Application_Model_Albumform(); $form->envio->setLabel('Guardar'); $this->view->form = $form; if ($this>_request->isPost()) { $formData = $this>_request->getPost(); if ($form->isValid($formData)) { $albums = new Application_Model_Albums(); $id = (int)$form->getValue('id'); $row = $albums->fetchRow('id='.$id); $row->artista = $form->getValue('artista'); $row->titulo = $form->getValue('titulo'); $row->save(); $this->_redirect('/'); 56
} else { $form->populate($formData); } } else { // El id del album se obtiene en $params['id'] $id = (int)$this->_request->getParam('id', 0); if ($id > 0) { $albums = new Application_Model_Albums(); $album = $albums->fetchRow('id='.$id); $form->populate($album->toArray()); } } } ...
Busquemos las diferencias de agregar un lbum. Primero, cuando desplegamos al formulario al usuario, necesitamos haber obtenido el ttulo y el artista del lbum desde la base de datos y haber llenado los elementos del formulario con ellos:
57
// El id del album se obtiene en $params['id'] $id = (int)$this->_request->getParam('id', 0); if ($id -> 0) { $albums = new Application_Model_Albums(); $album = $albums->fetchRow('id='.$id); $form->populate($album->toArray()); }
Esto se hace si el request no es un POST y se utiliza el modelo para recuperar un rengln de la base de datos. La clase Zend_Db_Table_Row tiene una funcin miembro llamada toArray() que puede usarse para llenar el formulario directamente. Finalmente, necesitamos guardar los datos modificados en el rengln correcto de la base de datos. Esto se realiza al recuperar el identificador del rengln y guardar los nuevos datos:
58
$albums = new Application_Model_Albums(); $id = (int)$form->getValue('id'); $row = $albums->fetchRow('id='.$id); La plantilla de vista es la misma que para agregar.phtml: testzf/application/views/scripts/index/modificar.phtml <?php echo $this->form ;?>
59
Eliminar un lbum
Para redondear nuestra aplicacin, funcionalidad de eliminacin de albums. necesitamos agregar la
Tenemos un vnculo Eliminar a continuacin de cada lbum en la pgina principal, y la funcionalidad correspondiente sera eliminarlo cuando se haga click sobre este vnculo. Esto no sera del todo correcto. Recuerde nuestra especificacin HTML, recuerde que no podra hacer una accin irreversible utilizando GET y en su lugar podra usar POST. Deberamos mostrar un formulario de confirmacin cuando el usuario haga click en Eliminar y si despus hace click en Si, ejecutaramos la eliminacin. Como este formulario es trivial, crearemos un formulario en HTML dentro del guin de vista.
60
61
} Else { $id = (int)$this->_request->getParam('id'); if ($id > 0) { $albums = new Application_Model_Albums(); $this->view->album = $albums->fetchRow('id='.$id); } } } ...
Utilizamos el mtodo isPost() en request para definir si debemos desplegar el formulario de confirmacin o si realizamos la eliminacin, por medio de la clase Application_Model_Albums(). La eliminacin efectiva se realiza mediante una llamada al mtodo delete() de la clase Zend_Db_Table_Abtract. Si el valor de request no es un POST, entonces buscamos el parmetro id, recuperamos el registro correcto de la base de datos y lo asignamos a la vista.
62
El guin de la vista es un formulario simple: Testzf/application/views/scripts/index/eliminar.phtml <?php if ($this->album) :?> <p>Esta seguro que desea eliminar este lbum '<?php echo $this-> escape($this->album->titulo); ?>' por <?php echo $this->escape($this->album->artista); ?>'? </p> <form action="<?php echo $this-> url(array('action'=>'eliminar')); ?>" method="post"> <div> <input type="hidden" name="id" value="<?php echo $this-> album-> id; ?>" /> <input type="submit" name="del" value="Si" /> <input type="submit" name="del" value="No" /> </div> </form> <?php else: ?> <p>No se puede recuperar este lbum.</p> <?php endif;?> 63
En el layout, desplegamos un mensaje de confirmacin para el usuario y un formulario con los botones Si y No. En la accin, verificamos especficamente por el valor Si para eliminar el registro. Esto es todo! - ahora completamente funcional. usted tiene una aplicacin
64
65
Solicitud
examina la solicitud y determina los componentes clave de la URL
Controlador Frontal
Modelo
Zend_Form
Respuesta
Vista
Layout
66
Class Zend_Views
La clase Bootstrap define que recursos y componentes son inicializados. Por default, Zend Framework's es inicializado del controlador frontal, y es usa el directorio de default application/controllers/
67
Despus de validar el formulario, originalmente se necesitar recuperar los valores para poder ejecutar otras operaciones, tal como actualizar una base de datos o notificar un servicio web. Se pueden recuperar todos los valores para todos los elementos usando getValues(); getValue($name) le permite recuperar un solo valor del elemento por su nombre:
A veces se quiere llenar el formulario con valores especficos antes de generarlos. stos pueden ser llevados a cabo ya sea con los mtodos setDefaults() o populate():
$form->setDefaults($data); $form->populate($data);
Por otro lado, si se quisera limpiar el formulario antes de llenarlo o validarlo; se puede realizar usando el mtodo reset():
$form->reset();
68
Validacin
Un caso de uso primario para formularios es validar datos enviados. Zend_Form le permite validar un formulario entero de una vez, o una parte de l, asi como tambin automatizar las respuestas de validacin para XmlHttpRequests (AJAX). Si los datos enviados no son vlidos, contiene mtodos para recuperar los distintos cdigos errores y los mensajes de elementos y subformularios de validaciones fallidas. Para validar un formulario entero, use el mtodo isValid(): if (!$form->isValid($_POST)) { // validacin fallida } isValid() validar cada elemento requerido, y algn elemento no requerido contenido en la data sometida. Algunas veces se necesitar validar slo un subset del dato; para esto use isValidPartial($data): if (!$form->isValidPartial($data)) { // validacin fallida } isValidPartial() slo intenta validar aquellos elementos en la informacin para los cuales existen similares elementos; si un elemento no es representado en la informacin, es pasado por alto. 69
http://angelorum.blogspot.com/2010 /09/zend-framework-3-estructuradel.html
70