2008-09-13 18 views
5

Actualmente estoy jugando con HTML_QuickForm para generar formularios en PHP. Parece algo limitado, ya que es difícil insertar mi propio javascript o personalizar la visualización y agrupación de ciertos elementos.¿Alternativa a PHP QuickForm?

¿Hay alguna alternativa a QuickForm que pueda proporcionar más flexibilidad?

Respuesta

5

Si le resulta difícil insertar Javascript en los elementos del formulario, considere utilizar un marco de JavaScript como Prototype o jQuery. Allí, puede centralizar la tarea de inyectar el manejo de eventos en los controles de formulario.

Con eso, quiero decir que no necesitará insertar manejadores de eventos en el código de formulario HTML. En cambio, registra esos eventos desde otro lugar. Por ejemplo, en el prototipo que sería capaz de escribir algo como esto:

$('myFormControl').observe('click', myClickFunction) 

también echar un vistazo a las respuestas a another question.

/EDITAR: por supuesto, también puede insertar atributos personalizados y, por lo tanto, manejadores de eventos en los elementos del formulario utilizando HTML_QuickForm. Sin embargo, el camino anterior es superior.

+0

Gracias por la sugerencia. Suena muy útil y definitivamente lo verificaré. – Readonly

5

He encontrado que el paquete Zend_Form del Zend Framework es especialmente flexible. Este componente también se puede usar con Zend_Dojo para implementar rápidamente ayudantes comunes de formularios javascript. Sin embargo, el componente es agnóstico cuando se trata de la biblioteca que utiliza, pero admite Dojo de forma naitivista. El componente también permite la agrupación, formularios de varias páginas, decoradores personalizados, validadores y otras características que lo hacen muy flexible.

1

I'll second Zend_Form; que tiene una excelente aplicación de estilo ini que le permite definir una forma extremadamente rápida:

[main] 
vessel.form.method = "post" 

vessel.form.elements.name.type = "text" 
vessel.form.elements.name.name = "name" 
vessel.form.elements.name.options.label = "Name: " 
vessel.form.elements.name.options.required = true 

vessel.form.elements.identifier_type.type = "select" 
vessel.form.elements.identifier_type.name = "identifier_type" 
vessel.form.elements.identifier_type.options.label = "Identifier type: " 
vessel.form.elements.identifier_type.options.required = true 
vessel.form.elements.identifier_type.options.multioptions.IMO Number = "IMO Number"; 
vessel.form.elements.identifier_type.options.multioptions.Registry organisation and Number = "Registry organisation and Number"; 
vessel.form.elements.identifier_type.options.multioptions.SSR Number = "SSR Number"; 

vessel.form.elements.identifier.type = "text" 
vessel.form.elements.identifier.name = "identifier" 
vessel.form.elements.identifier.options.label = "Identifier: " 
vessel.form.elements.identifier.options.required = true 
vessel.form.elements.identifier.options.filters.lower.filter = "StringToUpper" 

vessel.form.elements.email.type = "text" 
vessel.form.elements.email.name = "email" 
vessel.form.elements.email.options.label = "Email: " 
vessel.form.elements.email.options.required = true 

vessel.form.elements.owner_id.type = "hidden" 
vessel.form.elements.owner_id.name = "owner_id" 
vessel.form.elements.owner_id.options.required = true 

; submit button 
vessel.form.elements.submit.type = "submit" 
vessel.form.elements.submit.name = "Update" 
vessel.form.elements.submit.option.value = "Update" 
4

escribí un artículo sobre esto para OnLamp: Autofilled PHP Forms

Mi carne con HTML_QuickForm y Zend_Form y todos los demás forma- El manejo de los marcos que pude encontrar es que parecen suponer que escribirás código para generar el formulario. Pero eso no coincidía con mi proceso de desarrollo, donde comenzaba con la MIRADA de la página (especificada mediante plantillas HTML) y le añadía funcionalidad.

En mi visión del mundo, manejo de formularios se reduce a:

  1. Obtención de los datos que deben ir en el formulario para iniciar (por lo general de una base de datos).
  2. Obteniendo el código HTML para el formulario (generalmente una plantilla).
  3. Mushing 1 y 2 juntos, y dando salida al resultado.
  4. Obteniendo los datos del formulario enviado y validándolo.
  5. Volver a mostrar el formulario con los mensajes de error y los datos no válidos, O
  6. Mostrando la página felicitations-your-data-was-ok.

fillInFormValues ​​() hace 2, 3 y 5 realmente fáciles.

+0

+1 de mí. Estoy de acuerdo con usted de todo corazón y realmente me gusta el aspecto de su clase fillInFormValues ​​(). – da5id

1

Con Zend_Form es completamente posible comenzar con su formulario visualmente, y luego trabajar con contraseñas.

Esto se hace mediante la eliminación de todos los decoradores y su sustitución por un decorador ViewScript

$this->form->setDecorators(array(array('ViewScript', array('viewScript' => 'forms/aform.phtml')))); 

Y en ese ViewScript que haría algo como esto:

<?=$this->element->title->renderViewHelper()?> 

Ir con este enfoque, puede básicamente haz lo que quieras con la forma.

Otra gran novedad de Zend_Form es que puedes crear elementos personalizados que pueden encapsular otras cosas en ellos. Por ejemplo, puede tener un elemento que muestre un área de texto y luego algo de Javascript para convertirlo en un área WYSIWYG.

0

No puedo decir nada al respecto pero, el otro día, me encontré con la biblioteca de formularios clonefish. Parecía lo suficientemente prometedor para terminar en mi lista de marcadores como un "vistazo a esto más tarde".