Web Applications
Halaman ini menjelaskan pola web server-side: rute di routes/web.php, gerbang FrontendController, controller di controllers/Frontend/, dan template di templates/theme/ (serta varian mobile/tablet). Bacalah setelah Routing & MVC; lanjut ke API untuk JSON di bawah /api/….
routes/web.php
· FrontendController
· controllers/Frontend/
· NexaDom
Alur dokumen backend
Routing (gambaran web.php + api.php + tiga gerbang) → Web Applications (halaman ini) → API (JSON & ApiController).
Routing frontend dinamis (FrontendController@page)
Pola /{page}/{method?} (bila tidak diserahkan ke route eksplisit di web.php) mengarah ke FrontendController dan kelas di controllers/Frontend/, mis. ProductController@makan_minum.
| URL | Controller | Method |
|---|---|---|
/product |
ProductController | index |
/product/makan_minum |
ProductController | makan_minum |
/product/makan_minum/nasi-goreng |
ProductController | makan_minum (detail via handleProductDetail) |
/product/retail |
ProductController | retail |
/seller/username-toko |
SellerController | toko (validasi username_toko) |
/mall |
MallController | index |
Controllers & NexaController
Base controller
Semua controller turunan memakai NexaController (render, redirect, assignVars, nexaBlock, dll.).
<?php
namespace App\Controllers;
use App\System\NexaController;
class MyController extends NexaController
{
public function index(array $params = []): void
{
// Logika di sini
}
}Constructor menerima $view (NexaDom) dan $deviceLayouts.
Method penting di NexaController
| Method | Deskripsi |
|---|---|
render($template, $data) |
Render template dengan layout |
redirect($url) |
Redirect ke URL |
assignVar($name, $value) |
Set satu variabel ke template |
assignVars($array) |
Set banyak variabel |
nexaBlock($blockName, $data) |
Assign data ke blok NEXA |
assignBlock($blockName, $data) |
Alias nexaBlock |
divert($page) |
Ganti layout (theme / mobile / tablet) |
getDevice() |
Info perangkat |
getBrowserInfo() |
Analisis browser & device |
url($path) |
Generate URL |
Storage($table) |
Akses model / database |
Alur FrontendController (publik)
index() — /, /home, dan turunan melalui nodeController() bila halaman child ada; lalu divert() + render().
page() — pola dinamis /{page}/{method?}; controller anak biasanya hanya assignVars() / nexaBlock(), tanpa memanggil render() sendiri.
Contoh — ExampleController
Selaras Models (query SQL) (useModels + nexaBlock).
// controllers/Frontend/ExampleController.php
public function index(array $params = []): void
{
$this->assignVars([
'framework' => 'Nexa Dom Framework v2.0.0',
'versi' => 'v2.0.0',
]);
$users = $this->useModels('Exasmple', 'data', ['nexa@dom.com']);
$this->nexaBlock('food', [
'title' => 'Nasi Goreng',
'price' => 10000,
...($users ?? []),
]);
}Views & templates
Layouts & path template
| Layout | Header | Footer | Penggunaan |
|---|---|---|---|
| theme | theme/header.html |
theme/footer.html |
Desktop |
| mobile | mobile/header.html |
mobile/footer.html |
Mobile |
| tablet | tablet/header.html |
tablet/footer.html |
Tablet |
| dashboard | dashboard/header.html |
dashboard/footer.html |
Dashboard (Admin) |
| standalone | — | — | Tanpa header/footer |
Format: templates/desktop/{path}.html
render('index')→templates/theme/index.htmlrender('example')→templates/theme/example/index.htmlrender('product/detail')→templates/theme/product/detail.html
Device & variabel di template
FrontendController memakai divert() sebelum render() untuk theme/mobile/tablet.
$device = $this->getDevice();
$analysis = $this->getBrowserInfo();
if ($device['is_mobile']) {
// …
}Contoh — templates/theme/example/index.html
<!-- NEXA food -->
<div class="item">
<h1>{name}</h1>
<div>{email}</div>
<h3>{title}</h3>
<p>{price|rp}</p>
</div>
<!-- END food -->/product/…) tidak perlu didaftar di web.php jika ditangani frontend dinamis. Jika path sudah cocok route eksplisit, frontend dinamis tidak mengambil alih. Root / ditangani khusus lewat handleFrontendRoot().
Lanjut
API — ApiController & penangan dinamis · Distribusi (ringkasan) · Model query (SQL)