Estoy creando una aplicación web que involucra formularios. El marco utilizado es symfony2. Me gustaría tener todo funcionando para los usuarios sin javascript, y luego mejorar progresivamente la experiencia para las personas con javascript habilitado. Estoy planeando usar JQuery como mi biblioteca de JavaScript.Envío de formulario Ajax en symfony2 con degradación gradual para usuarios sin javascript
Me gustaría tener formularios donde enviar y muestra un mensaje utilizando el componente FlashMessage si el usuario no tiene javascript y la solicitud no es una solicitud AJAX.
Para usuarios con soporte de Javascript, me gustaría devolverles el mensaje si el envío se realiza correctamente. El javascript debería mostrar ese mensaje en un div inmediatamente.
Al mismo tiempo, necesito ocuparme de los mensajes de error. Para usuarios sin javascript, todo el formulario será reintegrado con los mensajes de error en su lugar.
Para los usuarios con javascript, la respuesta ajax debe ser una matriz que contenga la identificación del componente de entrada y el mensaje de error. Javascript debería insertarlos en el formulario sin una actualización.
Mirando el libro de Symfony2, puedo ver lo siguiente para presentaciones, que luego lo modificó para comprobar si la petición es una petición AJAX:
public function newAction(Request $request)
{
// just setup a fresh $task object (remove the dummy data)
$task = new Task();
$form = $this->createFormBuilder($task)
->add('task', 'text')
->add('dueDate', 'date')
->getForm();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
// perform some action, such as saving the task to the database
if ($this->request->isXmlHttpRequest(){
//return data ajax requires.
}
return $this->redirect($this->generateUrl('task_success'));
}
}
// ...
}
El problema que encontramos con este enfoque es que es ISN muy elegante Necesito agregar ese cheque adicional en cada formulario. Además, este método no funcionaría si, por ejemplo, la solicitud entra por Zend_AMF.
¿Hay alguna forma mejor de hacerlo?