Joomla Framework kullanarak JSON'a dönün


11

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.

Besteci ve Joomla'ya Başlarken'i takip ettim ! makalesine gidin ve Framework Uygulamasını çalışır durumda tutun. İFrame'im için çalışmak için varsayılan HTML çıktısını özelleştirdim ve API'da bir başlangıç ​​yaptım. News'i şablon olarak kullandım ve API'm için hepsi harika olan bir denetleyici, model, tablo ve görünüm oluşturdum. Daha sonra böyle verilerimin JSON temsilini döndüren çok basit bir Twig şablonu oluşturdum:

{{ 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.

Yanıtlar:


6

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!


3

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ızı sağlamak için zincirlenebilir.

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


Önerin için teşekkürler. Ne yazık ki, sendHeaders'ı neden kullansam bile, Content-Type hala üzerine yazılmaya başlandı. Çıkışı kullanmayı denedim, ancak şablon oluşturulmadığı için çıktı almadım. Yanıt olarak gönderdiğim bir çözüm buldum.
Joe P

Başka bir çözüm ekleyeceğim, böylece benim ihtiyaç duyabileceklerim için de işe yarar. Eğer kullanırsanız exitşu anda olduğu gibi bunu çalıştırıp sadece çıkış dan daha fazla bir şey önlemelidir. Cevabınız çok daha iyi görünüyor.
Jordan Ramstad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.