Nxdom Framework

Nusantara eXtreme Development Object Model — dokumentasi resmi

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

  1. setJsController menulis ke $_SESSION['js_controller_data']['NamaController'] (nama controller dari getControllerName()).
  2. Helper NexaJs (rute /app/main.js dan sejenisnya) memanggil getControllerData(), mengambil entri controller terbaru, dan menyertakan isinya dalam JavaScript yang dihasilkan.
  3. Permintaan /app/main.js?live=1 mengembalikan 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 data bersama 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 menjadi callback; ditambah metadata luas (URL, CSRF, user, base_url, dll.) di NexaController (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.phpsetJsController, 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.