Controller Helpers

Pengenalan Controller Helpers

Controller Helpers adalah kumpulan method yang mempermudah pengembangan aplikasi dengan menyediakan fungsi-fungsi umum yang sering digunakan dalam controller. NexaController menyediakan berbagai helper untuk mempermudah tugas-tugas seperti validasi data, manipulasi string, pengolahan array, dan lainnya.

Validasi Data

NexaController menyediakan beberapa helper untuk validasi data:


// Validasi field yang wajib diisi
$missingFields = $this->validateRequiredFields(['name', 'email', 'password']);

// Validasi form dengan aturan validasi
$validationResult = $this->validateForm([
    'name' => 'required|min:3',
    'email' => 'required|email',
    'password' => 'required|min:8'
]);

// Validasi field tunggal
$isEmailValid = $this->validateSingleField('email', 'email', null, 'Email tidak valid');

// Validasi dengan response
$response = $this->validateWithResponse([
    'name' => 'required|min:3',
    'email' => 'required|email'
]);

// Sanitize input
$cleanInput = $this->sanitize($input);

// Render dengan validasi
$this->renderWithValidation('form', [
    'title' => 'Registration Form'
], 'default');
        

Form Data Helpers

Helper untuk mengelola data form:


// Mendapatkan nilai lama (old value) setelah validasi gagal
$oldName = $this->old('name', '');
$oldEmail = $this->old('email', '');

// Memeriksa apakah ada error untuk field tertentu
$hasNameError = $this->hasError('name');

// Mendapatkan pesan error untuk field tertentu
$nameError = $this->getFieldError('name', '');

// Mendapatkan semua error
$allErrors = $this->getAllErrors();

// Membangun aturan validasi dari array field
$validationRules = $this->buildValidationRules([
    'name' => ['required', 'min' => 3],
    'email' => ['required', 'email'],
    'password' => ['required', 'min' => 8]
]);
        

Data Handling

Helper untuk mengelola dan memanipulasi data:


// Menetapkan data
$this->setData('user', $user);
$this->setData([
    'user' => $user,
    'products' => $products
]);

// Menetapkan data array
$this->setDataArray([
    'users' => $users,
    'products' => $products
]);

// Menetapkan data untuk elemen pertama
$this->setDataFirst($users, 'users');

// Menetapkan data untuk elemen dengan index tertentu
$this->setDataIndex($users, 2, 'users');

// Menetapkan data mentah
$this->setDataRaw($data);

// Menetapkan data untuk loop
$this->setDataLoop($products, 'product_item');

// Menetapkan data dengan mode otomatis
$this->setDataSmart($data);

// Menetapkan nilai
$this->setValue('status', 'active');
$this->setValue([
    'status' => 'active',
    'role' => 'user'
]);

// Debug struktur data
$structureInfo = $this->debugDataStructure($data);
        

Config Data Filtering

Helper untuk memfilter dan memanipulasi data konfigurasi:


// Filter data konfigurasi
$filteredData = $this->filterConfigData($configData, 'user', ['name', 'email']);

// Filter data konfigurasi dengan exclude
$filteredData = $this->filterConfigData($configData, 'user', ['password', 'token'], true);

// Multi filter
$filteredData = $this->multiFilterConfigData($configData, [
    'user' => ['name', 'email'],
    'product' => ['name', 'price']
]);

// Exclude fields
$filteredData = $this->excludeConfigFields($configData, 'user', ['password', 'token']);

// Include fields
$filteredData = $this->includeConfigFields($configData, 'user', ['name', 'email']);

// Merge config data
$mergedData = $this->mergeConfigData([
    $userConfig,
    $productConfig
], [
    'user' => ['name', 'email'],
    'product' => ['name', 'price']
]);

// Config builder
$config = $this->configBuilder($data)
    ->exclude('user', ['password', 'token'])
    ->include('product', ['name', 'price'])
    ->get();

// Debug config filter
$this->debugConfigFilter($configData, 'user', ['name', 'email']);
        

Safe Parameters

Helper untuk mengelola parameter dengan aman:


// Mendapatkan parameter dengan nilai default
$params = $this->paramsWithDefaults([
    'page' => 1,
    'limit' => 10,
    'sort' => 'name'
]);

// Memeriksa keberadaan parameter
$hasParams = $this->hasParams(['id', 'type']);

// Mendapatkan parameter yang tidak kosong
$nonEmptyParams = $this->nonEmptyParams(['name', 'email']);

// Mendapatkan parameter yang aman
$safeParams = $this->safeParams(['name', 'email']);
$name = $safeParams['name'];
$email = $safeParams['email'];

// Mendapatkan parameter tunggal yang aman
$name = $this->safeParam('name', '');

// Debug safe params
$this->debugSafeParams($safeParams);
        

String Manipulation

Helper untuk memanipulasi string:


// Membuat path
$path = $this->makePath('users/profile');

// Decode Base64 dengan aman
$data = $this->safeBase64Decode($encodedData, null);

// Memeriksa apakah string adalah Base64 valid
$isValid = $this->isValidBase64($string);

// Decode Base64 sederhana
$data = $this->simpleBase64Decode($encodedData, null);

// Memeriksa apakah slug adalah Base64 valid
$isValid = $this->isSlugValidBase64(1);

// Mendapatkan slug yang di-decode
$decodedSlug = $this->getDecodedSlug(1, null);
        

File dan Path

Helper untuk mengelola file dan path:


// Memeriksa keberadaan file dalam project
$exists = $this->fileExistsInProject('config/app.php');

// Mendapatkan direktori base
$baseDir = $this->getBaseDir();

// Mendapatkan nama project
$projectName = $this->getProjectName();

// Mendapatkan URL base
$baseUrl = $this->getBaseUrl();

// Memeriksa apakah template exists
$exists = $this->isExists('users/profile');
        

Node Controller

Helper untuk mengelola node controller (sub-controller):


// Memanggil node controller
$result = $this->nodeController('User', ['id' => 1]);

// Memanggil node controller dengan namespace kustom
$result = $this->nodeController('Admin\\User', ['id' => 1], 'App\\Controllers');

// Memanggil controller dengan proxy
$userController = $this->callController('User')
    ->withParams(['id' => 1])
    ->method('profile')
    ->execute();

// Memanggil multiple controllers
$controllers = $this->nodeControllers([
    'user' => ['controller' => 'User', 'params' => ['id' => 1]],
    'product' => ['controller' => 'Product', 'params' => ['id' => 2]]
]);

// Memeriksa keberadaan controller
$exists = $this->controllerExists('User');

// Mendapatkan controller yang tersedia
$availableControllers = $this->getAvailableControllers();

// Mengatur namespace controller
$this->setControllerNamespace('App\\Controllers\\Admin');

// Debug node controller
$debugInfo = $this->debugNodeController('User', ['id' => 1]);

// Debug node controller render
$this->debugNodeControllerRender('User', ['id' => 1]);
        

Model Helpers

Helper untuk bekerja dengan model:


// Menggunakan model
$user = $this->useModels('User', 'getById', [1]);

// Mendapatkan model yang tersedia
$availableModels = $this->getAvailableModels();

// Debug model
$modelInfo = $this->debugModel('User');

// Menampilkan debug model
$this->debugModelDisplay('User');

// Mendapatkan method model
$methods = $this->getModelMethods('User');

// Menampilkan model yang tersedia
$this->displayAvailableModels();

// Memanggil model dengan state key
$result = $this->callModel('User', 'getById', [1], 'current_user');

// Batch model operations
$results = $this->batchModelOperations([
    ['model' => 'User', 'method' => 'getById', 'params' => [1]],
    ['model' => 'Product', 'method' => 'getByUser', 'params' => [1]]
]);

// Clear model cache
$this->clearModelCache('User');
        

Log Management

Helper untuk mengelola log:


// Log
$this->log();

// Clear all logs
$result = $this->clearAllLogs();

// Clear logs by date
$result = $this->clearLogsByDate('2023-01-01');

// Clear old logs
$result = $this->clearOldLogs(7);

// Get log info
$logInfo = $this->getLogInfo();

// Display log manager
$this->displayLogManager();
        

Best Practices

Berikut adalah beberapa praktik terbaik dalam menggunakan controller helpers:

  • Gunakan helper yang sesuai untuk tugas yang spesifik
  • Manfaatkan safe parameter helpers untuk memastikan keamanan data
  • Gunakan config filtering untuk memfilter data yang akan dikirim ke template
  • Manfaatkan node controller untuk modularisasi kode
  • Gunakan model helpers untuk akses data yang konsisten
  • Manfaatkan log management untuk debugging dan audit
  • Gunakan validation helpers untuk memastikan validitas data input