Zend_Form-QuickStart.xml 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 19873 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.form.quickstart">
  5. <title>Inicio rápido a Zend_Form</title>
  6. <para>
  7. Esta guía rápida pretende cubrir los fundamentos para crear, validar
  8. y presentar formularios
  9. usando
  10. <classname>Zend_Form</classname>
  11. </para>
  12. <sect2 id="zend.form.quickstart.create">
  13. <title>Creando un objeto formulario</title>
  14. <para>
  15. Crear un objeto de formulario es muy simple: solo instancíe
  16. <classname>Zend_Form</classname>
  17. </para>
  18. <programlisting language="php"><![CDATA[
  19. $form = new Zend_Form;
  20. ]]></programlisting>
  21. <para>
  22. Para casos de uso avanzados, es posible desee crear una subclase
  23. de
  24. <classname>Zend_Form</classname>
  25. , pero para formularios simples,
  26. puede programar la creación de un formulario usando un
  27. objeto
  28. <classname>Zend_Form</classname>
  29. </para>
  30. <para>
  31. Si desea especificar el action y method del formulario (siempre
  32. buenas ideas), puede
  33. hacer uso de los accesos
  34. <methodname>setAction()</methodname>
  35. y
  36. <methodname>setMethod()</methodname>
  37. :
  38. </para>
  39. <programlisting language="php"><![CDATA[
  40. $form->setAction('/resource/process')
  41. ->setMethod('post');
  42. ]]></programlisting>
  43. <para>
  44. El código de arriba establece el action del formulario a la
  45. <acronym>URL</acronym>
  46. parcial "/resource/process" y como method
  47. <acronym>HTTP</acronym>
  48. POST. Esto se
  49. mostrará en la presentación final.
  50. </para>
  51. <para>
  52. Usted puede establecer atributos
  53. <acronym>HTML</acronym>
  54. adicionales para la etiqueta
  55. <methodname>&lt;form&gt;</methodname>
  56. mediante el uso de
  57. los métodos setAttrib() o setAttribs(). Por ejemplo, si desea
  58. especificar el id establezca el atributo "id":
  59. </para>
  60. <programlisting language="php"><![CDATA[
  61. $form->setAttrib('id', 'login');
  62. ]]></programlisting>
  63. </sect2>
  64. <sect2 id="zend.form.quickstart.elements">
  65. <title>Añadir elementos al formulario</title>
  66. <para>
  67. Un formulario no es nada sin sus elementos.
  68. <classname>Zend_Form</classname>
  69. contiene de manera
  70. predeterminada algunos elementos que generan
  71. <acronym>XHTML</acronym>
  72. vía auxiliares
  73. <classname>Zend_View</classname>
  74. . Son los siguientes:
  75. </para>
  76. <itemizedlist>
  77. <listitem>
  78. <para>button</para>
  79. </listitem>
  80. <listitem>
  81. <para>checkbox (o varios checkboxes a la vez con multiCheckbox)
  82. </para>
  83. </listitem>
  84. <listitem>
  85. <para>hidden</para>
  86. </listitem>
  87. <listitem>
  88. <para>image</para>
  89. </listitem>
  90. <listitem>
  91. <para>password</para>
  92. </listitem>
  93. <listitem>
  94. <para>radio</para>
  95. </listitem>
  96. <listitem>
  97. <para>reset</para>
  98. </listitem>
  99. <listitem>
  100. <para>select (tanto regulares como de multi-selección)</para>
  101. </listitem>
  102. <listitem>
  103. <para>submit</para>
  104. </listitem>
  105. <listitem>
  106. <para>text</para>
  107. </listitem>
  108. <listitem>
  109. <para>textarea</para>
  110. </listitem>
  111. </itemizedlist>
  112. <para>
  113. Tiene dos opciones para añadir elementos a un formulario; puede
  114. instanciar elementos
  115. concretos y pasarlos como objetos, o
  116. simplemente puede pasar el tipo de elemento y
  117. <classname>Zend_Form</classname>
  118. instaciará por usted un objeto
  119. del tipo correspondiente.
  120. </para>
  121. <para>Algunos ejemplos:</para>
  122. <programlisting language="php"><![CDATA[
  123. // Instanciando un elemento y pasandolo al objeto form:
  124. $form->addElement(new Zend_Form_Element_Text('username'));
  125. // Pasando el tipo de elemento del formulario al objeto form:
  126. $form->addElement('text', 'username');
  127. ]]></programlisting>
  128. <para>
  129. De manera predeterminada, éstos no tienen validadores o filtros.
  130. Esto significa que
  131. tendrá que configurar sus elementos con un mínimo
  132. de validadores, y potencialmente
  133. filtros. Puede hacer esto (a) antes
  134. de pasar el elemento al formulario, (b) vía opciones
  135. de
  136. configuración pasadas cuando crea un elemento a través de
  137. <classname>Zend_Form</classname>
  138. , o (c) recuperar el elemento
  139. del objeto form y configurándolo posteriormente.
  140. </para>
  141. <para>
  142. Veamos primero la creación de validadores para la instancia de un
  143. elemento concreto.
  144. Puede pasar objetos
  145. <classname>Zend_Validate_*</classname>
  146. o el nombre de un
  147. validador para utilizar:
  148. </para>
  149. <programlisting language="php"><![CDATA[
  150. $username = new Zend_Form_Element_Text('username');
  151. // Pasando un objeto Zend_Validate_*:
  152. $username->addValidator(new Zend_Validate_Alnum());
  153. // Pasando el nombre de un validador:
  154. $username->addValidator('alnum');
  155. ]]></programlisting>
  156. <para>Cuando se utiliza esta segunda opción, si el constructor del
  157. validador acepta
  158. argumentos, se pueden pasar en un array como tercer
  159. parámetro:</para>
  160. <programlisting language="php"><![CDATA[
  161. // Pasando un patrón
  162. $username->addValidator('regex', false, array('/^[a-z]/i'));
  163. ]]></programlisting>
  164. <para>(El segundo parámetro se utiliza para indicar si el fallo debería
  165. prevenir la ejecución
  166. de validadores posteriores o no; por defecto,
  167. el valor es false.)</para>
  168. <para>Puede también desear especificar un elemento como requerido. Esto
  169. puede hacerse
  170. utilizando un método de acceso o pasando una opción al
  171. crear el elemento. En el primer
  172. caso:</para>
  173. <programlisting language="php"><![CDATA[
  174. // Hace este elemento requerido:
  175. $username->setRequired(true);
  176. ]]></programlisting>
  177. <para>Cuando un elemento es requerido, un validador 'NotEmpty'
  178. (NoVacio) es añadido a la
  179. parte superior de la cadena de
  180. validaciones, asegurando que el elemento tenga algún valor
  181. cuando
  182. sea requerido.</para>
  183. <para>Los filtros son registrados básicamente de la misma manera que
  184. los validadores. Para
  185. efectos ilustrativos, vamos a agregar un
  186. filtro para poner en minúsculas el valor final:</para>
  187. <programlisting language="php"><![CDATA[
  188. $username->addFilter('StringtoLower');
  189. ]]></programlisting>
  190. <para>Entonces, la configuración final de nuestro elemento queda así:</para>
  191. <programlisting language="php"><![CDATA[
  192. $username->addValidator('alnum')
  193. ->addValidator('regex', false, array('/^[a-z]/'))
  194. ->setRequired(true)
  195. ->addFilter('StringToLower');
  196. // o, de manera más compacta:
  197. $username->addValidators(array('alnum',
  198. array('regex', false, '/^[a-z]/i')
  199. ))
  200. ->setRequired(true)
  201. ->addFilters(array('StringToLower'));
  202. ]]></programlisting>
  203. <para>
  204. Tan simple como esto, realizarlo para cada uno de los elementos
  205. del formulario puede
  206. resultar un poco tedioso. Intentemos la opción
  207. (b) arriba mencionada. Cuando creamos un
  208. nuevo elemento utilizando
  209. <methodname>Zend_Form::addElement()</methodname>
  210. como fábrica,
  211. opcionalmente podemos pasar las opciones de configuración. Éstas
  212. pueden
  213. incluir validadores y los filtros que se van a utilizar. Por
  214. lo tanto, para hacer todo lo
  215. anterior implícitamente, intente lo
  216. siguiente:
  217. </para>
  218. <programlisting language="php"><![CDATA[
  219. $form->addElement('text', 'username', array(
  220. 'validators' => array(
  221. 'alnum',
  222. array('regex', false, '/^[a-z]/i')
  223. ),
  224. 'required' => true,
  225. 'filters' => array('StringToLower'),
  226. ));
  227. ]]></programlisting>
  228. <note>
  229. <para>
  230. Si encuentra que está asignando elementos con las mismas
  231. opciones en varios lugares,
  232. podría considerar crear su propia
  233. subclase de
  234. <classname>Zend_Form_Element</classname>
  235. y utilizar
  236. ésta; a largo plazo le permitirá escribir menos.
  237. </para>
  238. </note>
  239. </sect2>
  240. <sect2 id="zend.form.quickstart.render">
  241. <title>Generar un formulario</title>
  242. <para>
  243. Generar un formulario es simple. La mayoría de los elementos
  244. utilizan un auxiliar de
  245. <classname>Zend_View</classname>
  246. para
  247. generarse a sí mismos, por lo tanto necesitan un objeto vista con el
  248. fin de
  249. generarse. Además, tiene dos opciones: usar el método
  250. render() del formulario, o
  251. simplemente mostrarlo con echo.
  252. </para>
  253. <programlisting language="php"><![CDATA[
  254. // Llamando a render() explicitamente, y pasando un objeto vista opcional:
  255. echo $form->render($view);
  256. // Suponiendo un objeto vista ha sido previamente establecido vía setView():
  257. echo $form;
  258. ]]></programlisting>
  259. <para>
  260. De manera predeterminada,
  261. <classname>Zend_Form</classname>
  262. y
  263. <classname>Zend_Form_Element</classname>
  264. intentarán utilizar el
  265. objeto vista inicializado en el
  266. <methodname>ViewRenderer</methodname>
  267. , lo que significa que no
  268. tendrá que establecer la vista manualmente cuando use el
  269. <acronym>MVC</acronym>
  270. de Zend
  271. Framework. Generar un formulario en un script vista es tan simple
  272. como:
  273. </para>
  274. <programlisting language="php"><![CDATA[
  275. <?php echo $this->form
  276. ]]></programlisting>
  277. <para>
  278. Detrás del telón,
  279. <classname>Zend_Form</classname>
  280. utiliza
  281. "decoradores" (decorators) para generar la salida. Estos decoradores
  282. pueden
  283. reemplazar, añadir o anteponer contenido, y tienen plena
  284. introspección al elemento que
  285. les es pasado. Como resultado, puede
  286. combinar múltiples decoradores para lograr efectos
  287. personalizados.
  288. Predeterminadamente,
  289. <classname>Zend_Form_Element</classname>
  290. actualmente combina cuatro decoradores para obtener su salida; la
  291. configuración sería
  292. como sigue:
  293. </para>
  294. <programlisting language="php"><![CDATA[
  295. $element->addDecorators(array(
  296. 'ViewHelper',
  297. 'Errors',
  298. array('HtmlTag', array('tag' => 'dd')),
  299. array('Label', array('tag' => 'dt')),
  300. ));
  301. ]]></programlisting>
  302. <para>(Donde &lt;HELPERNAME&gt; es el nombre de un view helper
  303. que utilizar, y varía según el
  304. elemento)</para>
  305. <para>Lo anterior crea una salida como la siguiente:</para>
  306. <programlisting language="html"><![CDATA[
  307. <dt><label for="username" class="required">Username</dt>
  308. <dd>
  309. <input type="text" name="username" value="123-abc" />
  310. <ul class="errors">
  311. <li>'123-abc' has not only alphabetic and digit characters</li>
  312. <li>'123-abc' does not match against pattern '/^[a-z]/i'</li>
  313. </ul>
  314. </dd>
  315. ]]></programlisting>
  316. <para>(Aunque no con el mismo formato.)</para>
  317. <para>Puede cambiar los decoradores usados para un elemento si desea
  318. tener diferente salida;
  319. véase la sección sobre decoradores para
  320. mayor información.</para>
  321. <para>El
  322. propio formulario simplemente itera sobre los elementos y los
  323. cubre en un &lt;form&gt;
  324. HTML. El action y method que
  325. proporcionó cuando definió el formulario se pasan a la
  326. etiqueta
  327. <methodname>&lt;form&gt;</methodname>
  328. , como cualquier
  329. atributo que establezca vía
  330. <methodname>setAttribs()</methodname>
  331. y
  332. familia.
  333. </para>
  334. <para>Elementos son desplegados en el orden en el que fueron
  335. registrados, o, si el elemento
  336. contienen un atributo de orden, ese
  337. orden será utilizado. Usted puede fijar el orden de
  338. un elemento
  339. usando:</para>
  340. <programlisting language="php"><![CDATA[
  341. $element->setOrder(10);
  342. ]]></programlisting>
  343. <para>O, cuando crea un elemento, pasándolo como una opción:</para>
  344. <programlisting language="php"><![CDATA[
  345. $form->addElement('text', 'username', array('order' => 10));
  346. ]]></programlisting>
  347. </sect2>
  348. <sect2 id="zend.form.quickstart.validate">
  349. <title>Comprobar si un formulario es válido</title>
  350. <para>Después que un formulario es enviado, necesitará comprobar y ver
  351. si pasa las
  352. validaciones. Cada elemento es valuado contra los datos
  353. provistos; si una clave no está
  354. presente y el campo fue marcado como
  355. requerido, la validación se ejecuta contra un valor
  356. nulo.</para>
  357. <para>
  358. ¿De dónde provienen los datos?. Puede usar
  359. <varname>$_POST</varname>
  360. o
  361. <varname>$_GET</varname>
  362. , o
  363. cualquier otra fuente de datos que tenga a mano (solicitud de un
  364. servicio web, por
  365. ejemplo):
  366. </para>
  367. <programlisting language="php"><![CDATA[
  368. if ($form->isValid($_POST)) {
  369. // ¡Correcto!
  370. } else {
  371. // ¡Fallo!
  372. }
  373. ]]></programlisting>
  374. <para>
  375. Con solicitudes
  376. <acronym>AJAX</acronym>
  377. , a veces puede ignorar la
  378. validación de un solo elemento, o grupo de elementos.
  379. <methodname>isValidPartial()</methodname>
  380. validará parcialmente
  381. el formulario. A diferencia de
  382. <methodname>isValid()</methodname>
  383. ,
  384. que como sea, si alguna clave no esta presente, no ejecutará las
  385. validaciones para ese
  386. elemento en particular.
  387. </para>
  388. <programlisting language="php"><![CDATA[
  389. if ($form->isValidPartial($_POST)) {
  390. // de los elementos presentes, todos pasaron las validaciones
  391. } else {
  392. // uno u más elementos probados no pasaron las validaciones
  393. }
  394. ]]></programlisting>
  395. <para>
  396. Un método adicional,
  397. <methodname>processAjax()</methodname>
  398. ,
  399. puede también ser usado para validar formularios parciales. A
  400. diferencia de
  401. <methodname>isValidPartial()</methodname>
  402. , regresa una
  403. cadena en formato
  404. <acronym>JSON</acronym>
  405. -formatted conteniendo mensajes de
  406. error en caso de fallo.
  407. </para>
  408. <para>Asumiendo que sus validaciones han pasado, ahora puede obtener
  409. los valores filtrados:</para>
  410. <programlisting language="php"><![CDATA[
  411. $values = $form->getValues();
  412. ]]></programlisting>
  413. <para>Si necesita los valores sin filtrar en algún punto, utilice:</para>
  414. <programlisting language="php"><![CDATA[
  415. $unfiltered = $form->getUnfilteredValues();
  416. ]]></programlisting>
  417. <para>
  418. If you on the other hand need all the valid and filtered values of a partially valid
  419. form,
  420. you can call:
  421. </para>
  422. <programlisting language="php"><![CDATA[
  423. $values = $form->getValidValues($_POST);
  424. ]]></programlisting>
  425. </sect2>
  426. <sect2 id="zend.form.quickstart.errorstatus">
  427. <title>Obteniendo el estado de error</title>
  428. <para>Entonces, ¿su formulario no es válido? En la mayoría de los
  429. casos, simplemente puede
  430. generar el formulario nuevamente y los
  431. errores se mostrarán cuando se usen los
  432. decoradores predeterminados:</para>
  433. <programlisting language="php"><![CDATA[
  434. if (!$form->isValid($_POST)) {
  435. echo $form;
  436. // o asigne al objeto vista y genere una vista...
  437. $this->view->form = $form;
  438. return $this->render('form');
  439. }
  440. ]]></programlisting>
  441. <para>
  442. Si quiere inspeccionar los errores, tiene dos métodos.
  443. <methodname>getErrors()</methodname>
  444. regresa una matriz
  445. asociativa de nombres / códigos de elementos (donde códigos es una
  446. matriz de códigos de error).
  447. <methodname>getMessages()</methodname>
  448. regresa una matriz asociativa de nombres / mensajes de elementos
  449. (donde mensajes es una
  450. matriz asociativa de pares código de error /
  451. mensaje de error). Si un elemento no tiene
  452. ningún error, no será
  453. incluido en la matriz.
  454. </para>
  455. </sect2>
  456. <sect2 id="zend.form.quickstart.puttingtogether">
  457. <title>Poniendo todo junto</title>
  458. <para>Construyamos un simple formulario de login. Necesitaremos
  459. elementos que representen:</para>
  460. <itemizedlist>
  461. <listitem>
  462. <para>usuario</para>
  463. </listitem>
  464. <listitem>
  465. <para>contraseña</para>
  466. </listitem>
  467. <listitem>
  468. <para>Botón de ingreso</para>
  469. </listitem>
  470. </itemizedlist>
  471. <para>Para nuestros propósitos, vamos a suponer que un usuario válido
  472. cumplirá con tener solo
  473. caracteres alfanuméricos, comenzar con una
  474. letra, tener una longitud mínima de 6
  475. caracteres y una longitud
  476. máxima de 20 caracteres; se normalizarán en minúsculas. Las
  477. contraseñas deben tener un mínimo de 6 caracteres. Cuando se procese
  478. vamos simplemente a
  479. mostrar el valor, por lo que puede permanecer
  480. inválido.</para>
  481. <para>
  482. Usaremos el poder de la opciones de configuración de
  483. <classname>Zend_Form</classname>
  484. para crear el formulario:
  485. </para>
  486. <programlisting language="php"><![CDATA[
  487. $form = new Zend_Form();
  488. $form->setAction('/user/login')
  489. ->setMethod('post');
  490. // Crea un y configura el elemento username
  491. $username = $form->createElement('text', 'username');
  492. $username->addValidator('alnum')
  493. ->addValidator('regex', false, array('/^[a-z]+/'))
  494. ->addValidator('stringLength', false, array(6, 20))
  495. ->setRequired(true)
  496. ->addFilter('StringToLower');
  497. // Crea y configura el elemento password:
  498. $password = $form->createElement('password', 'password');
  499. $password->addValidator('StringLength', false, array(6))
  500. ->setRequired(true);
  501. // Añade los elementos al formulario:
  502. $form->addElement($username)
  503. ->addElement($password)
  504. // uso de addElement() como fábrica para crear el botón 'Login':
  505. ->addElement('submit', 'login', array('label' => 'Login'));
  506. ]]></programlisting>
  507. <para>A continuación, vamos a crear un controlador para manejar esto:</para>
  508. <programlisting language="php"><![CDATA[
  509. class UserController extends Zend_Controller_Action
  510. {
  511. public function getForm()
  512. {
  513. // crea el formulario como se indicó arriba
  514. return $form;
  515. }
  516. public function indexAction()
  517. {
  518. // genera user/form.phtml
  519. $this->view->form = $this->getForm();
  520. $this->render('form');
  521. }
  522. public function loginAction()
  523. {
  524. if (!$this->getRequest()->isPost()) {
  525. return $this->_forward('index');
  526. }
  527. $form = $this->getForm();
  528. if (!$form->isValid($_POST)) {
  529. // Falla la validación; Se vuelve a mostrar el formulario
  530. $this->view->form = $form;
  531. return $this->render('form');
  532. }
  533. $values = $form->getValues();
  534. // ahora intenta y autentica...
  535. }
  536. }
  537. ]]></programlisting>
  538. <para>Y un script para la vista que muestra el formulario:</para>
  539. <programlisting language="php"><![CDATA[
  540. <h2>Please login:</h2>
  541. <?php echo $this->form
  542. ]]></programlisting>
  543. <para>
  544. Como notará en el código del controlador, hay más trabajo por
  545. hacer: mientras la
  546. información enviada sea válida, necesitará
  547. todavía realizar la autenticación usando
  548. <classname>Zend_Auth</classname>
  549. , por ejemplo.
  550. </para>
  551. </sect2>
  552. <sect2 id="zend.form.quickstart.config">
  553. <title>Usando un objeto Zend_Config</title>
  554. <para>
  555. Todas las clases
  556. <classname>Zend_Form</classname>
  557. son
  558. configurables mediante
  559. <classname>Zend_Config</classname>
  560. ; puede
  561. incluso pasar un objeto al constructor o pasarlo a través de
  562. <methodname>setConfig()</methodname>
  563. . Veamos cómo podemos crear
  564. el formulario anterior usando un archivo
  565. <acronym>INI</acronym>
  566. .
  567. Primero, vamos a seguir las recomendaciones, y colocaremos nuestras
  568. configuraciones
  569. dentro de secciones reflejando su objetivo y y
  570. enfocándonos en la sección 'development'.
  571. A continuación, pondremos
  572. en una sección de configuración para el controlador dado
  573. ('user'), y
  574. una clave para el formulario ('login'):
  575. </para>
  576. <programlisting language="ini"><![CDATA[
  577. [development]
  578. ; metainformación general del formulario
  579. user.login.action = "/user/login"
  580. user.login.method = "post"
  581. ; elemento username
  582. user.login.elements.username.type = "text"
  583. user.login.elements.username.options.validators.alnum.validator = "alnum"
  584. user.login.elements.username.options.validators.regex.validator = "regex"
  585. user.login.elements.username.options.validators.regex.options.pattern = "/^[a-z]/i"
  586. user.login.elements.username.options.validators.strlen.validator = "StringLength"
  587. user.login.elements.username.options.validators.strlen.options.min = "6"
  588. user.login.elements.username.options.validators.strlen.options.max = "20"
  589. user.login.elements.username.options.required = true
  590. user.login.elements.username.options.filters.lower.filter = "StringToLower"
  591. ; elemento password
  592. user.login.elements.password.type = "password"
  593. user.login.elements.password.options.validators.strlen.validator = "StringLength"
  594. user.login.elements.password.options.validators.strlen.options.min = "6"
  595. user.login.elements.password.options.required = true
  596. ; elemento submit
  597. user.login.elements.submit.type = "submit"
  598. ]]></programlisting>
  599. <para>Entonces puede pasarlo al constructor del formulario:</para>
  600. <programlisting language="php"><![CDATA[
  601. $config = new Zend_Config_Ini($configFile, 'development');
  602. $form = new Zend_Form($config->user->login);
  603. ]]></programlisting>
  604. <para>y el formulario entero será definido.</para>
  605. </sect2>
  606. <sect2 id="zend.form.quickstart.conclusion">
  607. <title>Conclusión</title>
  608. <para>
  609. Esperamos que después de este pequeño tutorial sea capaz de
  610. descubrir el poder y
  611. flexibilidad de
  612. <classname>Zend_Form</classname>
  613. . Continúe leyendo para
  614. profundizar más en el tema.
  615. </para>
  616. </sect2>
  617. </sect1>