NexaJs
Dari controller PHP, kirim array data ke sisi klien: disimpan di sesi, lalu dibaca saat memuat main.js dinamis (/app/main.js). Cocok untuk state halaman, judul, payload AJAX ringan, atau metadata yang dibutuhkan skrip di browser.
NexaController.php · setJsController NexaJs.php
1. Pemanggilan di controller
$this->setJsController([
'page_title' => 'Nexa Dom Framework',
]);Metode ini protected — dipanggil dari kelas yang mewarisi NexaController (mis. Frontend\IndexController). Data dibersihkan untuk menghindari nilai yang tidak bisa diserialisasi (mis. resource PDO), lalu disimpan di sesi di bawah kunci per nama controller.
2. Alur data
setJsControllermenulis ke$_SESSION['js_controller_data']['NamaController'](nama controller darigetControllerName()).- Helper
NexaJs(rute/app/main.jsdan sejenisnya) memanggilgetControllerData(), mengambil entri controller terbaru, dan menyertakan isinya dalam JavaScript yang dihasilkan. - Permintaan
/app/main.js?live=1mengembalikan JSON mentah untuk debugging (tanpa mengubah alur utama).
3. Memuat bundle di layout (template)
Di <head> atau sebelum </body>, sertakan skrip yang dihasilkan dari rute app (URL di-resolve lewat placeholder {link/…} pada saat render NexaDom). Contoh seperti di templates/theme/header.html:
<script src="{link/app/min.js}"></script>Setelah halaman memuat min.js (atau /app/main.js sesuai konfigurasi proyek), data dari setJsController ikut tersedia pada objek yang diekspos skrip tersebut — urutan: panggil setJsController di controller, render layout yang memuat tag di atas.
Cek terhubung di konsol
Skrip dari NexaJs mendefinisikan window.NEXA (bukan string literal). console.log('NEXA') hanya mencetak teks NEXA — itu bukan pembuktian bahwa bridge PHP sudah aktif. Untuk memastikan bundle dan data controller terbaca, buka DevTools → Console setelah halaman selesai dimuat, lalu jalankan:
// Label + objek (paling jelas)
console.log('NEXA', window.NEXA);
// Atau langsung
console.log(NEXA);
// Cek ada / tidak (tanpa error jika skrip belum termuat)
console.log(typeof NEXA !== 'undefined' ? 'NEXA OK' : 'NEXA belum termuat');
// Data dari setJsController biasanya di sini
console.log(NEXA.controllers);Jika typeof NEXA === 'undefined', pastikan tag <script src="…"> mengarah ke bundle yang benar, tidak diblokir jaringan, dan dieksekusi setelah navigasi (bukan halaman cache tanpa skrip).
4. Parameter kedua (opsional)
- Tanpa parameter kedua — payload utama ada di
databersama metadata ringkas (page_uri,projectName,controller_name, dll.). - String — diperlakukan sebagai nama controller kustom (kompatibilitas lama).
- Array — “cara baru”: payload pertama tetap
data; parameter kedua menjadicallback; ditambah metadata luas (URL, CSRF, user,base_url, dll.) diNexaController(lihat implementasi di sekitar baris 7911+).
5. Hubungan dengan template NexaDom
setJsController tidak mengisi variabel template {…}. Untuk tampilan HTML gunakan assignVar / assignVars; untuk skrip klien yang membutuhkan data dari controller yang sama, gunakan setJsController atau gabungkan keduanya.
6. Referensi kode
system/NexaController.php — setJsController, hasJsControllerData, getJsControllerData. system/Helpers/NexaJs.php — generate main.js. Rute aplikasi: routes/web.php (/app/{params} → JsController).
Lanjut
Aset · APP_DEBUG · Routing · Events · Indeks Helper · Beranda.