Kohana framework - лучшие практики внедрения Ajax
Я разрабатываю приложение в рамках Kohana. Я хотел бы узнать лучшие практики внедрения ajax в кохане. Пока я использую другой контроллер для ajax. Я думаю, что важными проблемами будут минимизация потребностей в ресурсах и сеансов обработки.
Заранее спасибо
Ответы
Ответ 1
Я использую это:
В Controller_Template:
public function before()
{
$this->auto_render = ! $this->request->is_ajax();
if($this->auto_render === TRUE)
{
parent::before();
}
}
И внутри моих действий:
if ($this->request->is_ajax())
{
...
$this->response->headers('Content-type','application/json; charset='.Kohana::$charset);
$this->response->body($jsonEncoded);
}
Ответ 2
Как отмечают ребята, вам не нужен отдельный контроллер для ваших действий ajax. Вы можете использовать объект запроса Kohana для идентификации типа запроса. Это можно сделать следующим образом:
<?php
class Controller_Test extends Controller_Template {
/**
* @var View Template container
*/
protected $template = 'template';
/**
* @var View Content to render
*/
protected $content = 'some/content/view';
// Inherited from parent class
protected $auto_template_render = TRUE;
public function before()
{
parent::before();
if ($this->request->is_ajax() OR !$this->request->is_initial()) {
$this->auto_template_render = FALSE;
}
}
public function after()
{
if ($this->auto_template_render == FALSE) {
// We have ajax or internal request here
$this->template = $this->content;
} else {
// We have regular http request for a page
$this->template = View::factory($this->template)
->set('content', $this->content);
}
// Call parent method
parent::after();
}
}
Хотя пример очень прост, он может быть улучшен до того, что вы хотите архивировать. В основном я закончил писать свой собственный Controller_Template
, чтобы сделать то, что мне нужно. Также вы можете добавить параметр формата к своим URL-адресам, чтобы URL-адреса .html
вернули регулярное html-представление данных и URL-адреса .json
сделали то же самое, но в формате json.
Для получения дополнительной информации (и, возможно, идей) см. kerkness Неофициальная вики-страница Kohana
Ответ 3
Вам не нужен отдельный контроллер, вы можете использовать Kohana_Controller_Template для обработки запросов AJAX.
Вам решать, какой ответ будет в случае запроса AJAX (или подзапроса, он обычно тот же). Обычно я обычно создаю шаблон только в том случае, если запрос является исходным (и не-ajax), в противном случае он превращает его в $content var.
Кроме того, вы можете легко проверить, является ли запрос AJAX/subrequest:
if ($request->is_ajax())
if ( ! $request->is_initial())
Ответ 4
Кроме того, если вы используете Kohana_Controller_Template в качестве родителя/предка контроллера, полезно помнить о том, чтобы отключить автообрисовку при доступе через AJAX, чтобы предотвратить загрузку и рендеринг всего шаблона.
if ($request->is_ajax()) $this->auto_render = FALSE;