Kohana - nerede AJAX komut koymak?

9 Cevap php

I Kohana kullanıyorum ancak bu soru Raylar, CI, ya da diğer herhangi bir MVC web geliştirme çerçevesinde geçerlidir. Nerede Kişinin sunucu tarafında AJAX komut sopa iyi yerdir?

I planning bir Ajax_Controller oluşturma ve bireysel komut başına bir yöntem / eylemini kullanarak oldu.

Örneğin, ana sayfada index.php/home would send an XMLHttpRequest to index.php/ajax/login , and the edit profile form index.php/profile/edit would send an XMLHttpRequest to index.php/ajax/editprofile bir giriş formu. En iyi uygulama nedir?

9 Cevap

Ben Kohana kullanın ama ne benim çerçevesinde yapılacak AJAX komut denetleyicileri olmasıdır yoktur. Ben bağımsız denetleyicileri olarak onları tedavi etmek için çalışıyorum ama sonunda onlar sadece denetleyicileri vardır.

Ben herhangi bir model için olmayan ajax eylemleri gibi aynı kontrolör benim ajax eylemleri koymak eğilimindedir.

Ne zaman ben, ben aynı eylemleri kullanmayı deneyin ve sadece çıkış türünü değiştirin. En görevleri zaten olmayan bir ajax sürümü olmalıdır, yani bu oldukça iyi çalışma eğilimindedir. Mantık tekrarını azaltmak için çok kullanışlı.

AJAX MVC sınırları her haçlar. Yani, sadece bir modeli, görünüm veya denetleyici içine gitmez.

  • AJAX komut sitenizde komut çağırıyor olacak - bu yüzden bu amaç için yarattık sizin controller tabakasının bir bölümü içerecektir.
  • Sırayla o denetleyicisi model tabakası, sadece olmayan bir AJAX isteği olduğu gibi tarafından sağlanan arabirimini kullanarak veritabanına erişmek olacaktır.
  • Geri istemciye yanıt veri JSON ya da XML veya bir şey olarak paketlenmiş olabilir. Teknik olarak bu, sizin view katmanın görevi olsa bir görünüm katmanın uygulamanın tanımı "bir HTML çiftleşmiş sistem" başka bir şey ziyade "işleme olup olmadığını istemciye geri gönderilen alır bir şey biçimlendirme ise o "sonra XML veya JSON nesil kendi yeni bir küçük bölüme gitmek gerekebilir HTML veya XML gibi başka bir şeydir.

Komut (JavaScript dosyaları) kendileri göndermek için, bu muhtemelen MVC çerçevesinde gelen web sunucusu yerine doğrudan ele olacak.

GET ve POST istekleri için farklı kontrol yapabilirim? Bilmiyorum. Benim düşünceme göre, JS istekleri farklı ya ele olmamalıdır.

Ben şahsen sadece GET, POST veya talep başka tür gibi JS isteklerini bakın. Ben kullanıcı ile ilgili JS-temelli eylemler var ise, ben sadece kullanıcı denetleyicisi onları oluşturun.

Eğer AJAX (Javascript) komut kendileri demek, bu genel / js klasörüne gitmek gerekir. Bu AJAX istekleri tarafından çağrılan eylemleri anlamına Ancak, bunlar ilgili denetçinin başka eylemler olarak tedavi edilmelidir. Tamamen dinlendirici olmak için, bu eylemler için dönüş değerleri olarak farklı bir format (json, xml, vb) kullanılarak yapılmalıdır.

Ayrı bir denetleyici kullanarak iyi bir fikirdir. Ben de dönüş türüne göre fonksiyon ve daha sonra eylemler benim denetleyicileri düzenlemek.

Ben Pylons kullanıyorum ek olarak, ben @ jsonify ile bir eylem dekore edebilirsiniz ve otomatik olarak JSON Python nesneleri dönüştürme ilgilenir. Çok kullanışlı.

Ben genellikle (non ajax kontrolör ayrıca kullandığı) ortak bir model aracılığıyla taleplerini sevk, tek denetleyicisi bütün ajax istekleri tutmak gibi

Ajax denetleyicisi (html fragmanları, json veri, vb) veya non-ajax denetleyicisi (tam sayfa) aracılığıyla sonuçları görünümü olmanın temel fark

Ben bir çaylak değilim, ama php mvc ile ajax elde etmek için benim anlayış, dayalı ... düşünce adımlar olabilir:

  • içine 'HTML şablonu' dan mevcut php görünüm katmanın tanımı / işlevini değiştirmek ', vb (XML, JSON biçimlendirme sonuçları.' - o AJAX nesnesi haline çıkışına denetleyici tarafından çağrılır ilgili modülün, gelen> sonuç, o size gelir biçimlendirme yöntemleri ile her bir sınıfa görünümü katmanları yazmak gerekir
  • PHP modülü katman aynı kalır
  • Lütfen PHP aynı yapıyı rota kalmak JS ile bir Ajax yönlendirici bir sınıf oluşturmak
  • işlemek için JS ile bir ajax sonuç işleyici sınıf oluşturmak sonuçları PHP denetleyicileri döndüm (XML JSON, vb.), sonra buradan ne istediğiniz kullanıcı etkileşimleri, bu Ajax yönlendirici sınıfının üzerinde tarafından çağrılır yok

Bu yüzden,

ajax router (send XMLhttprequest)
-> PHP controllers  C
-> PHP module -> PHP view results M
-> PHP controllers output results V
-> ajax results handle (into page)

You could wrap it up as a general REST-api, and use RESTful conventions and URIs. Example:

Bunun yerine index.php / ajax / editprofile it / API / profile / ProfilAdı index.php bir PUT isteği olabilir.