Лучший способ структурировать Ajax для приложения Платформы Зенда

Я думал о наличии уровня служб модуля Ajax с контроллерами и действиями, которые взаимодействуют с моей моделью. Легкий, но не очень расширяемый и нарушил бы DRY. Если я изменяю логистику некоторого процесса, я должен буду отредактировать контроллеры Ajax и нормальные контроллеры.

Так идеально я загрузил бы те же самые действия и для пользователей JavaScript и для не-JavaScript. Я думал о, возможно, проверке $_POST['ajax'], если бы это установлено, я загрузил бы другое (json'y) представление для данных. Задавался вопросом how/a хороший способ сделать это (плагин фронтального контроллера, который я воображаю?) или если кто-то может указать на меня на АКТУАЛЬНОЕ учебное руководство, которое описывает действительно хороший путь к тому, чтобы создать большее ajax приложение.

5
задан John Nall 20 January 2012 в 18:00
поделиться

2 ответа

Вы можете использовать объект request, чтобы определить, был ли запрос через ajax, например:

// from your controller
if($this->getRequest()->isXmlHttpRequest()) {
    // an ajax request, do something special (e.g. render partial view)
} else {
   // render entire view
}

Это в основном проверка на наличие заголовка x-requested-with (который не всегда присутствует, в зависимости от библиотеки JS и т.д.). См. (в разделе "обнаружение ajax-запросов"):

http://framework.zend.com/manual/en/zend.controller.request.html

5
ответ дан 14 December 2019 в 13:28
поделиться

Вы можете проверить наличие заголовков XmlHttpRequest. Однако не все библиотеки Javascript делают это, и даже те, которые делают, не обязательно делают это во всех браузерах.

Существует также AjaxContext, который в основном проверяет переменную запроса "context", аналогично вашей идее $_POST['ajax'].

То, что я в итоге сделал, было похоже на ваше первоначальное предложение. Я создал модуль AJAX. Чтобы избежать дублирования кода контроллеров, я создал сервисный слой, который обрабатывает все операции над моделями, поэтому мои контроллеры действительно отвечают только за преобразование запросов ввода и отображение.

1
ответ дан 14 December 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: