Controller Basics

Apa itu Controller?

Controller dalam NexaUI adalah komponen yang menangani request HTTP, memproses input dari user, berinteraksi dengan model untuk mengakses data, dan mengembalikan response yang sesuai. Controller bertindak sebagai penghubung antara Model dan View dalam arsitektur MVC.

NexaController

NexaController adalah base class untuk semua controller dalam aplikasi NexaUI. Class ini menyediakan berbagai method dan property yang memudahkan pengembangan aplikasi.


namespace App\Controllers;

use App\System\NexaController;

class UserController extends NexaController
{
    public function index(): void
    {
        $this->render('users/index');
    }
}
        

Lifecycle Controller

Berikut adalah siklus hidup controller dalam NexaUI:

  1. Instantiation - Controller diinisialisasi
  2. init() - Method init() dipanggil untuk melakukan setup awal
  3. Action Execution - Method yang sesuai dengan route dipanggil
  4. Rendering - View dirender jika diperlukan
  5. Response - Response dikirim ke client
  6. Destruction - Controller dihancurkan

Method Dasar

NexaController menyediakan berbagai method dasar yang sering digunakan:

  • render(string $template, array $data = [], bool $return = false) - Merender template
  • redirect(string $url, int $statusCode = 302) - Melakukan redirect ke URL lain
  • getParam(string $key, $default = null) - Mendapatkan parameter dari request
  • getPost(string $key = null, $default = null) - Mendapatkan data POST
  • getGet(string $key = null, $default = null) - Mendapatkan data GET
  • isPost() - Mengecek apakah request adalah POST
  • isGet() - Mengecek apakah request adalah GET
  • isAjax() - Mengecek apakah request adalah AJAX

Template Handling

Controller dapat memanipulasi template dengan berbagai method:

  • assignVar(string $name, $value) - Menetapkan variabel untuk template
  • assignVars(array $vars) - Menetapkan multiple variabel
  • assignBlock(string $blockName, array $data) - Menetapkan data untuk block template
  • setLayout(string $layout) - Mengatur layout yang digunakan

public function profile(): void
{
    $userId = $this->getParam('id');
    $user = $this->useModels('User', 'getById', [$userId]);
    
    $this->assignVars([
        'user' => $user,
        'page_title' => 'User Profile'
    ]);
    
    $this->render('users/profile');
}
        

Best Practices

Berikut adalah beberapa praktik terbaik dalam menggunakan controller:

  • Gunakan init() untuk melakukan setup yang diperlukan untuk semua action
  • Pisahkan logika bisnis ke dalam model atau service
  • Gunakan method redirect() untuk mengarahkan user setelah form submission
  • Validasi input user dengan method validateForm()
  • Gunakan isAjax() untuk mendeteksi request AJAX dan berikan response yang sesuai
  • Manfaatkan setFlash() untuk menyimpan pesan yang akan ditampilkan pada request berikutnya