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;