Структура Коханы - Лучшие практики внедрения Ajax
Я разрабатываю приложение в рамках Kohana. Я хотел бы узнать о лучших практиках внедрения ajax в кохане. До сих пор я использую другой контроллер для ajax. Я думаю, что важными проблемами будут сведение к минимуму потребностей в ресурсах и проведение сессий.
Заранее благодарю
4 answers
Я использую это:
В 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);
}
Как сказали ребята выше, вам не нужен отдельный контроллер для ваших действий 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
, чтобы делать то, что мне нужно. Также вы можете рассмотреть возможность добавления параметра format в свои URL-адреса, чтобы URL-адреса .html
возвращали обычный html-представление данных и URL-адреса .json
сделали то же самое, но в формате json.
Для получения дополнительной информации (и, возможно, идей) см. неофициальная вики-страница Kohana в Керкнессе
На самом деле вам не нужен отдельный контроллер, вы также можете использовать Kohana_Controller_Template для обработки AJAX-запросов.
Вам решать, каким будет ответ в случае запроса AJAX (или подзапроса, обычно это одно и то же). Обычно у меня шаблон фактически отображается только в том случае, если запрос является начальным (а не ajax), в противном случае он отображается как $content var.
Кроме того, вы можете легко проверить, является ли запрос AJAX/подзапросом:
if ($request->is_ajax())
if ( ! $request->is_initial())
Кроме того, при использовании Kohana_Controller_Template в качестве родителя/предка контроллера рекомендуется не забывать отключать автоматическую визуализацию при доступе через AJAX, чтобы предотвратить загрузку и визуализацию всего шаблона.
if ($request->is_ajax()) $this->auto_render = FALSE;