it-swarm-tr.com

Joomla Framework kullanarak JSON'a dönün

Joomla Framework kullanarak bir web uygulaması oluşturmaya başladım. İçeriği AJAX ile güncellemek için kullanılacak bir API ile birlikte bir iFrame'de görüntülenecek basit bir web sayfasından oluşur.

Başlarken Composer ve Joomla! makalesini takip ettim ve Framework App çalışır durumda. Varsayılan HTML çıktısını özelleştirdim iFrame için çalışmak ve API üzerinde bir başlangıç ​​yaptık.Haber'i şablon olarak kullandım ve API'm için hepsi harika çalışan bir denetleyici, model, tablo ve görünüm oluşturdum.Ardından çok basit bir Twig Böyle benim verilerimin JSON temsilini döndüren şablonu:

{{ items|json_encode|raw }}

Şimdiye kadar iyi ama AJAX jQuery ile kullanırken sorunlara neden olacak bu başlık döndürülen:

Content-Type:text/html; charset=utf-8

Bunu eklemenin basit bir durumu olacağını düşündüm, ancak nereye koyarsam yapayım, döndürülen başlığı değiştirmez:

$this->app->setHeader('Content-Type', 'application/json', true);

SetHeader'ın adını değiştirdiğim gibi çalıştığını biliyorum, yeni üstbilginin geri döndüğünü görüyorum, böylece yürütme işleminin daha sonra üzerine yazıldığını varsayıyorum.

Benim sorum şu, ben doğru şekilde mi gidiyorum? Benim görüşüm DefaultHtmlView uzanır hangi yanlış, bir DefaultJsonView oluşturmak gerekir? Doğru İçerik Türünü nasıl ayarlayabilirim veya JSON döndürmek için daha iyi bir yaklaşım var mı?

Bir API oluşturmak için Joomla Framework'ü kullanmanın en iyi yolu hakkında verilebilecek herhangi bir tavsiye yardımı çok takdir edilecektir.

11
Joe P

Sonunda bunu yapmanın "doğru" yolu gibi görünen şeyi buldum. SendHeaders kullansam bile, ek Content-Type ekleniyordu ve daha sonra eklendikçe döndürülüyordu.

Ben kodu takip ve AbstractWebApplication.php başlıkları bu çizgi ile ayarlar:

// Send the content-type header.
$this->setHeader('Content-Type', $this->mimeType . '; charset=' . $this->charSet);

Bu yüzden kendi kodumu kullanarak kendi mimeType tanımlamak mümkün:

$this->app->mimeType = 'application/json';

Şimdi doğru başlık döndürülür ve jQuery çıktıyı JSON olarak anlar!

6
Joe P

Biraz kazıyordum ama sorunu görüyorum

https://github.com/joomla-framework/application/blob/master/src/AbstractWebApplication.php

SetHeader işlevine bakarsanız, üstbilgiyi henüz ayarlamaz, yalnızca "hazır" hale getirir

Yani yapmanız gereken basit

$this->app->setHeader('Content-Type', 'application/json', true)->sendHeaders();

Ekstra fonksiyon sendHeaders(), sadece onları "hazırlamak" için değil, başlıkları ayarlamanıza izin vermek için zincirlenebilir.

Büyük olasılıkla exit; daha fazla yürütmeyi önlemek ve JSON çıktısını göndermek için sendHeaders işlevi büyük olasılıkla çalışmıyor.

3
Jordan Ramstad