Comenzando con Zend Framework: III Parte
Por zsamer en Abril 14, 2008
Continuando con el capitulo anterior “Implementando MVC con ZF”, en esta tercera entrega del set de artículos Comenzando con Zend Framework, vamos a ver lo simple que es desarrollar formularios con Zend_Form.
Para todo desarrollador de aplicaciones web una tarea cotidiana es tener que lidiar con estos una y otra vez, que sin duda se convierte en algo monótono y tedioso, eso es cosa del pasado! Con ZF hacer formularios es simple, robusto y entretenido, aprovechando todo el potencial de la POO implementa un poderoso diseño que incorpora un completo conjunto de funcionalidades que nos ahorra tiempo y dolores de cabeza como es la validaciones de datos, filtros, flexibilidad en la configuración, orden de los elementos, decorados CSS/XHTML y mucho más.
Agregando un formulario a nuestro IndexController quedaría de la siguiente forma:
quickstart/application/controllers/IndexController.php
-
<?php
-
require_once 'Zend/Controller/Action.php';
-
class IndexController extends Zend_Controller_Action
-
{
-
public function indexAction()
-
{
-
$form = $this->getAddCommentForm();
-
if ($this->getRequest()->isPost()) {
-
if ($form->isValid($_POST)) {
-
$values = $form->getValues();
-
$this->view->values = $values;
-
// Hacer otras cosas, como guardar los datos en una tabla.
-
}
-
}
-
$this->view->title = 'Comentarios';
-
$this->view->form = $form;
-
}
-
-
{
-
require_once 'Zend/Form.php';
-
'method' => 'post',
-
'required' => true,
-
'label' => 'Deja tu comentario'
-
)),
-
'label' => 'Enviar'
-
))
-
),
-
));
-
return $form;
-
}
-
}
Como pueden ver Zend_Form se ocupa de la forma más elegante del manejo de los datos. Validación, el filtrado, mostrar errores, etc.
y nuestra vista index.phtml quedaría de la siguiente forma:
quickstart\application\views\scripts\index\index.phtml
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
<html xmlns="http://www.w3.org/1999/xhtml">
-
<head>
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
<title>Zend Framework Quick Start</title>
-
</head>
-
<body>
-
<?php if($this->values) : ?>
-
<h3>Has enviado los siguientes valores:</h3>
-
<ul>
-
<?php foreach ($this->values as $value) :?>
-
<li>
-
<?= $this->escape($value); ?>
-
</li>
-
<?php endforeach; ?>
-
</ul>
-
<?php endif; ?>
-
<?= $this->form; ?>
-
</body>
-
</html>
Para ver en acción nuestra aplicación abrimos el navegador y escribimos la siguiente url: http://localhost/quickstart/public/
Simple, limpio y robusto, hemos llegado al final de este tutorial, aunque corto espero que haya sido de utilidad, en el próximo veremos algo de configuraciones y como tener acceso a nuestra base de datos Mysql para leer y guardar datos enviados desde un formulario (como el de este tutorial
)
Hasta la próxima.
Comentarios
26 Responses to “Comenzando con Zend Framework: III Parte”
Deja tu comentario

Me surge una contradiccion con Zend_Form y es que si yo quisiera cambiar algo de un formulario como agregar un campo mas o cambiar el tittle o algo que tenga que ver con el formulario html, tendria que tocar el Controller, esto no es algo contrario a MVC?
Si yo quisiera dejar la carpeta Vistas para que los disenadores trabajen en ella como quisieran, con Zend_Form tambien tendria que darle acceso a la logica de negocio, que se supone que no deberia tener nada mas que la logica de negocio.
Por este motivo no implemente en ningun desarrollo esta nueva libreria.
Es válido lo que dices, personalmente prefiero agregar el CSS del diseñador en Zend_Form y dejarlo en el modelo o controlador, en realidad pasa por un tema de comodidad y diseño de cada uno, siempre hay muchas opciones preferencias y camino para llegar al mismo resultado, aveces unas mejor que otra.
Hola, he encontrado un ejemplo http://akrabat.com/2008/02/21/simple-zend_form-example/ y los Zend_Form no lo deja ni en el modelo ni en el controlador, sino que los agrupa en otro “directorio”…
Cual es la mejor opción: modelo, controlador o esta última.
Saludos
Antes que nada, gracias por los comentarios, en el último articulo se estuvo discutiendo el mismo tema. te pongo el link Comenzando con Zend Framework: IV Parte
Personalmente me acomoda más en el modelo, ya que se involucra la el filtado y validación de los datos ingresados por el usuario en el form.
Pero cualquiera de las tres esta bién, cada desarrollador tiene sus propios métodos, diseño y comodidad.
saludos
Pablo: lo del tema de los diseñadores es contrario a este tipo de filosofías (al estilo Smarty).
Si tienes el caso de necesitar diseñadores, no necesarimante debes permitirles acceder a las vistas, es más, ese es tu trabajo. Deberías pedirles el diseño en html estándar y luego tú “maquetarlo” para que ande.
Distinto es si usas algo similar a Smarty que se da la posibilidad que un diseñador pudiera tocar las plantillas de forma directa, pero ante cuanquier aumento de complejidad de las mismas, ya se van a complicar la vida.
Los diseñadores no son solo dibujitos hay muchos en los que si le decis, tenes que usar foreach, y tal dato para mostrar una listado de cosas el tipo lo va a entender, creo que la complejidad a ese nivel no es tanta, que si puede existir en el controller.
Cuando pienso en MVC; pienso en trabajo en grupo
Controller -> Puede crearlo el Programador Senior
Modelo -> el programdor Junior
Vista -> el diseñador
Y de esta manera creo que abstraes al Programador importante que se tenga que calentar si la tabla no quedo centrada con respecto al texto, y cosas de esas, ellos tienen un sentido critico del diseño q nosotros carecemos.
En el tema de los formularios es tan simple, el diseñador sólo tiene que cambiar el css del form, nada más asi lo hago yo y resulta perfectamente, de hecho en nuestro sistema tenemos classes y contenedores (id) css estandard luego se modifica la hoja de estilo y en el resto del XHTML se modifican los layout y plantillas o vistas.
eso es.
Pablo, esa división que haces no tienen sentido (MVC y roles). No esperes que un “diseñador puro” pueda trabajar sobre una vista, para eso buscarás un programador con conocimientos de diseño.
Es el primer componente de zend que estoy viendo, desde que tome la carrera de “tratar” de aprender a usar zend, pero me surgio una duda ?
Seria muy complicado implementar un autocomplete de scriptaculous, o por ejemplo hacer varios calculos matematicos con varios campos de texto mediante javascript…. o me es mas recomendable hacerlo a la vieja usansa… puro html.
Saludos, excelente blog, esta entre mis favoritos
hola Nucklear,
Revisa estos links del manual:
http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.autocomplete
http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.contextswitch
http://framework.zend.com/manual/en/zend.dojo.view.html
http://framework.zend.com/manual/en/zend.dojo.html
Saludos,
Gracias, esa maldita costumbre mia de no querer leer el manual
Gracias, me parece que lo voy a seguir haciendo a la manera tradicional…
Saludos
Muy buenas!!! a ver, he seguido el manual paso a paso, incluso al final he tenido que copiar literalmente el código del ejemplo. El caso es que no soy capaz de sacarlo del todo :S. No sé porqué pero no aparece el form al final, me muestra:
Comentarios
form; ?>
Creo que me falla aquí “if($form->isValid($_POST))”
¿Teneis alguna idea de porqué?
gracias
Hola alex,
Prueba cambiando en la vista (index.phtml):
< ?= $this->form; ?>
por esto:
< ?php echo $this->form; ?>
Y en general todo lo que tenga: “
< ?=” cámbialo por “< ?php echo” tal como el ejemplo de arriba.Esto se debe a que debes de tener desactivado en php short_open_tag.
saludo y suerte.
pd: “
< ?php” se escribe todo junto, de corrido sin espacios como lo muestra aqui.ok, muchas gracias zsamer, mañana lo intento y te cuento que ya hace sueño jeje. Por cierto, no veas lo bien que me está viniendo tu blog. Gracias y enhorabuena ;););)
de nada, siempre un gusto compartir.
Conseguido!!! muchas gracias
Por cierto, donde puedo activar short_open_tag? en php.ini?? Lo dicho muchas gracias… y hasta pronte jeje. Bye.
Quisiera consultarte lo siguiente, en los forms se puede poner que la validación sea del lado del cliente como en PEAR con QuickForm.
Desde ya muchas gracias.
Saludos,
Diego
Hola, He seguido el ejemplo pero me dice que no encuentra el adaptador para la db, donde lo agrego?
No adapter found
Gracias
Una vez mas como siempre,tus ejemplos no funcionan
@luis: una vez más gente inútil que no es capaz de hacer funcionar cosas simples.
Hay que darte de comer en la manos, estos artículos son para gente más capacitadas y capaces de entender cosas sencillas.
una pregunta, he intentado usar el autocomplete pasandole los datos(data) y funciona, pero como hago para retornar datos atraves de url pagina.php y que devuelva datos en json?
JQuery()->autocomplete(’empresa’, array(’url’ => ‘/empresa/ajax’));?>
Gracias por tu ayuda
hoLA como estan me gustaria que me ayuden con un problema:
Consiste:
Trabajo con el modelo MVC, la cuestion es que envio un formulario desde una clase que tengo en una carpeta llamada forms, al momento de enviar se activa en el indexController una accion que se llama ingresar donde tengo esta linea y otra mas como indica el tutorial pero me doy cuenta que no entra a este if ($form->isValid($_POST)) {}.
Me gustaria que me ayuden que estoy desesperado ya he intentado de todo.
Gracias de antemano
Hola a todos, ante todo muchas gracias por estos post porque me estan ayudando a entender el funcionamiento de Zend Framework.
Siguiendo los pasos de este post me he encontrado el problema de que no me carga el formulario y me aparece:
Comentarios
form; ?>
…y no me muestra el formulario, ¿alguien podría indicarme por dónde podría estar el problema?.
Gracias de antemano.
David ya habian comentado esto, se trata de que no esta habilitado el short_open_tag, si no quieres meterte en temas de configuracion.
por citar un ejemplo
cambia el
por
un comentario extra, si necesitan agregar mas campos al formulario solamente deben listarlos dentro de el arreglo de elementos
ejemplo:
$form = new Zend_Form(array(
‘method’ => ‘post’,
‘elements’ => array(
‘input’ => array(
‘text’, array(
‘required’ => false,
‘label’=>’nombre’
)
),
‘comments’ => array(
‘textarea’, array(
‘required’ => true,
‘label’ => ‘Deja tu comentario’
)
),
’submit’ => array(
’submit’, array(
‘label’ => ‘Enviar’
)
)
),
)
);
no salieron los tags
cambia el
por