Я создаю веб-приложение, которое включает в себя формы. Используемая платформа - это symfony2. Я хотел бы, чтобы все работало для пользователей без javascript, а затем постепенно улучшал работу с людьми с включенным javascript. Я планирую использовать JQuery в качестве библиотеки JavaScript.
Я хотел бы иметь формы, в которых он отправляет и отображает сообщение с использованием компонента FlashMessage, если у пользователя нет javascript и запрос не является ajax-запросом.
Для пользователей с поддержкой javascript, я хотел бы вернуть им сообщение, если отправка прошла успешно. Затем javascript должен немедленно отобразить это сообщение в div.
В то же время мне нужно иметь дело с сообщениями об ошибках. Для пользователей без JavaScript вся форма будет перерисована с сообщениями об ошибках на месте.
Для пользователей с javascript ответом ajax должен быть массив, содержащий идентификатор компонента ввода и сообщение об ошибке. Затем Javascript должен вставить их в форму без обновления.
Глядя на книгу по symfony2, я вижу следующее для представления, затем я изменил его, чтобы проверить, является ли запрос 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'));
}
}
// ...
}
Проблема, с которой я сталкиваюсь при таком подходе, заключается в том, что он не очень элегантен. Мне нужно добавить эту дополнительную проверку каждой формы. Более того, этот метод не будет работать, если, скажем, запрос поступает через Zend_AMF.
Есть ли лучшие способы сделать это?