Кохана - куда вы кладете сценарии AJAX? - PullRequest
8 голосов
/ 05 апреля 2009

Я использую Kohana , но этот вопрос относится к Rails, CI или любой другой инфраструктуре веб-разработки MVC. Где лучше всего разместить свои серверные AJAX-скрипты?

Я планировал создать Ajax_Controller и использовать метод / действие для отдельного сценария.

Например, форма входа в систему на главной странице index.php/home отправит запрос XMLHttpRequest на index.php/ajax/login и форму редактирования профиля index.php/profile/edit отправит запрос XMLHttpRequest на index.php/ajax/editprofile. Какая лучшая практика?

Ответы [ 9 ]

9 голосов
/ 05 апреля 2009

Я склонен помещать свои действия ajax в тот же контроллер, что и действия не-ajax для любой данной модели.

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

7 голосов
/ 06 апреля 2009

AJAX пересекает все границы MVC. То есть это не относится только к модели, виду или контроллеру.

  • Ваши AJAX-скрипты будут вызывать скрипты на вашем сайте - так что это будет включать в себя раздел слоя controller , который вы создали для этой цели.
  • Этот контроллер, в свою очередь, будет обращаться к базе данных, используя интерфейс, предоставляемый вашим слоем модель , точно так же, как запрос без AJAX.
  • Данные для ответа клиенту могут быть упакованы как JSON или XML или что-то в этом роде. Технически это задача вашего уровня view , хотя если определение уровня представления в вашем приложении - не что иное, как «система шаблонов HTML», а не «обработка и форматирование всего, что отправляется обратно клиенту» это HTML или что-то вроде XML ", тогда вашему поколению XML или JSON может потребоваться перейти в новый небольшой раздел.

Что касается отправки самих сценариев (файлов Javascript), то, вероятно, это будет обрабатываться непосредственно веб-сервером, а не внутри вашей инфраструктуры MVC.

5 голосов
/ 05 апреля 2009

Вы делаете разные контроллеры для запросов GET и POST? Я не. По моему мнению, запросы JS также не должны обрабатываться иначе.

Я лично вижу запросы JS, такие как GET, POST или любой другой тип запроса. Поэтому, если у меня есть пользовательские действия на основе JS, я просто создаю их в пользовательском контроллере.

2 голосов
/ 04 февраля 2012

Я новичок, но, исходя из моего понимания, чтобы достичь ajax с php mvc ... можно подумать:

  • изменить определение / функцию существующего слоя представления php с «шаблона HTML» на «форматирование результатов (XML, JSON и т. Д.» -> результаты из соответствующего модуля, который затем вызывается контроллером для вывода в объект AJAX, затем это означает, что вам нужно записать слои представления в каждый конкретный класс с помощью методов форматирования
  • Уровень модуля PHP остается прежним
  • создайте класс маршрутизатора Ajax с JS, который останется той же структурой, которую вы маршрутизируете в своем PHP
  • создайте класс обработчика результатов ajax с JS для обработки результатов, полученных от контроллеров PHP (XML JSON и т. Д.), Затем отсюда выполните все необходимые пользовательские взаимодействия, это будет вызываться вышеупомянутым классом маршрутизатора Ajax

Итак,

ajax router (send XMLhttprequest)
-> PHP controllers  C
-> PHP module -> PHP view results M
-> PHP controllers output results V
-> ajax results handle (into page)
2 голосов
/ 05 апреля 2009

Если вы имеете в виду сами сценарии AJAX (Javascript), они должны находиться в вашей папке public / js. Однако, если вы имеете в виду действия, вызываемые этими AJAX-запросами, они должны рассматриваться как любые другие действия соответствующих контроллеров. Чтобы быть полностью RESTful, вы должны использовать другой формат (json, xml и т. Д.) В качестве возвращаемых значений для этих действий.

1 голос
/ 09 апреля 2009

Мне нравится хранить все мои ajax-запросы в одном контроллере, обычно отправляя их запросы через общую модель (которую также использует не ajax-контроллер)

Основным отличием является представление, полученное через контроллер ajax (фрагменты html, данные json и т. Д.) Или не-ajax контроллер (полные страницы)

1 голос
/ 05 апреля 2009

Использование отдельного контроллера - хорошая идея. Я либо организую свои контроллеры по функциям, а затем по типу возвращаемого значения.

Кроме того, когда я использую Pylons, я могу украсить действие с помощью @jsonify, и это автоматически позаботится о преобразовании объектов Python в JSON. Очень удобно.

1 голос
/ 05 апреля 2009

Я не использую Kohana, но то, что я делаю в своей среде, - это то, что сценарии AJAX являются контроллерами. Я пытаюсь рассматривать их как автономные контроллеры, но в конце концов они просто контроллеры.

0 голосов
/ 20 декабря 2009

Вы можете обернуть его как обычный REST-API и использовать соглашения RESTful и URI. Пример:

Вместо index.php / ajax / editprofile это может быть запрос PUT к index.php / api / profile / profilename.

...