2011-04-06 21 views
10

Kohana çerçevesinde bir uygulama geliştiriyorum. Kohana'da ajax'ın uygulanmasında en iyi uygulamaları bilmek isterim. Şimdiye kadar ajax için farklı denetleyici kullanıyorum. Bence önemli kaygılar, kaynak gereksinimini ve idare oturumlarını en aza indirecek.Kohana çerçevesi - Ajax uygulaması en iyi uygulamaları

Şimdiden teşekkürler

cevap

11

ajax eylemleriniz için ayrı bir denetleyiciye ihtiyacınız var. İstek türünü tanımlamak için Kohana'nın istek nesnesinden yararlanabilirsiniz. Bu şu şekilde yapılabilir:

<?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(); 
    } 
} 

örnek, arşivlemek istediğiniz ne geliştirilebilir çok basit olmasına rağmen. Temelde ihtiyacım olan şeyleri yapmak için kendi Controller_Template'u yazmayı bitirdim. Ayrıca, URL'leriniz için biçimlendirme parametresi eklemeyi düşünebilirsiniz, böylece .html URL'leri verilerin düzenli html gösterimini döndürdüler ve .json URL'leri aynısını yaptı, ancak json biçiminde. Daha fazla bilgi için (ve büyük olasılıkla fikirler) bkz. kerkness unofficial Kohana wiki

+2

bu iyi .. Ben kesinlikle bundan faydalanacağım ... teşekkürler .. Neyse, tüm toplum için yararlı olacak daha fazla öneri bekliyorum .. – Shameer

1

yılında Gerçekten de AJAX istekleri işlemek için Kohana_Controller_Template kullanabilirsiniz ayrı bir denetleyici gerekmez.

AJAX isteğinde (veya alt sorguda, genellikle aynı) yanıtın ne olacağına karar vermek size kalmıştır. Genelde, yalnızca ilk istekte bulunulduğunda (ve ajax değil) istekte bulunan şablona sahibim, aksi halde $ content var. o AJAX erişirken otomatik oluşturmayı devre dışı bırakma hatırlamak iyidir Denetleyiciniz üst/atası olarak Kohana_Controller_Template kullanılıyorsa,

if ($request->is_ajax()) 
if (! $request->is_initial()) 
+0

Tüm denetleyicilerim, Kohana_Controller_Template öğesini genişleten Controller_DefaultTemplate öğesini genişletir. Ajax yoluyla talep ederken gerekli olmayan DefaultTemplate'imin before() yönteminde birçok şey atayım. Bu yüzden, Kohana_Controller_Template'i uzatmasına rağmen ajax istekleri için farklı bir denetleyici kullanmaya karar verdim. Umarım bu durumdur. – Shameer

1

Ayrıca: bir istek AJAX/İstek içi ise

Ayrıca, kolayca kontrol edebilirsiniz şablonun yüklenmesini ve oluşturulmasını önlemek için. Controller_Template yılında

:

public function before() 
    { 
     $this->auto_render = ! $this->request->is_ajax(); 
     if($this->auto_render === TRUE) 
     { 
      parent::before(); 
     } 
    } 

Ve eylemler içine

: dostlar Yukarıda belirttiğimiz gibi

 if ($this->request->is_ajax())  
     { 
      ...   
      $this->response->headers('Content-type','application/json; charset='.Kohana::$charset); 
      $this->response->body($jsonEncoded); 
     } 
5

, yok ben bu kullanıyorum

if ($request->is_ajax()) $this->auto_render = FALSE; 
İlgili konular