Request processing adalah proses menangani dan memproses HTTP request yang masuk ke aplikasi. NexaController menyediakan berbagai method untuk mengakses dan memproses data request dengan mudah.
NexaController menyediakan beberapa method untuk mengakses data request:
getRequest()
- Mendapatkan instance NexaRequestgetParam(string $key, $default = null)
- Mendapatkan parameter dari request (POST, GET, atau URL)getPost(string $key = null, $default = null)
- Mendapatkan data POSTgetGet(string $key = null, $default = null)
- Mendapatkan data GETisPost()
- Memeriksa apakah request adalah POSTisGet()
- Memeriksa apakah request adalah GETisAjax()
- Memeriksa apakah request adalah AJAXBerikut adalah contoh mengakses data request dalam controller:
public function processForm(): void
{
// Memeriksa method request
if ($this->isPost()) {
// Mendapatkan semua data POST
$allPostData = $this->getPost();
// Mendapatkan data POST tertentu dengan default value
$name = $this->getPost('name', '');
$email = $this->getPost('email', '');
$age = $this->getPost('age', 0);
// Proses data
$this->useModels('User', 'create', [$name, $email, $age]);
// Redirect setelah proses
$this->redirect('/success');
return;
}
// Mendapatkan data GET
$id = $this->getGet('id');
$page = $this->getGet('page', 1);
// Mendapatkan parameter dari URL atau query string
$category = $this->getParam('category', 'all');
$this->assignVars([
'id' => $id,
'page' => $page,
'category' => $category
]);
$this->render('form');
}
NexaController menyediakan method input()
dan inputs()
untuk mengakses data request
dari berbagai sumber (GET, POST, PUT, DELETE) secara terpadu:
public function handleRequest(): void
{
// Mendapatkan nilai dari request (POST, GET, PUT, DELETE)
$id = $this->input('id');
$name = $this->input('name', 'Guest');
$email = $this->input('email');
// Mendapatkan semua input
$allInputs = $this->inputs();
// Proses data
$this->assignVars([
'id' => $id,
'name' => $name,
'email' => $email,
'all_inputs' => $allInputs
]);
$this->render('result');
}
NexaController menyediakan berbagai method untuk mengakses informasi URL dan path:
getRequestUri()
- Mendapatkan URI requestgetPath()
- Mendapatkan path requestgetCleanPath()
- Mendapatkan path request yang sudah dibersihkangetCurrentUrl()
- Mendapatkan URL saat iniurl(string $path = '')
- Membuat URL relatifgetQuery(string $key, $default = null)
- Mendapatkan parameter query stringgetQueryParams()
- Mendapatkan semua parameter query string
public function urlInfo(): void
//example.com/products/category/electronics?page=2&sort=price // Membuat URL $homeUrl = $this->url(); // / $productsUrl = $this->url('products'); // /products // Mendapatkan query parameters $page = $this->getQuery('page', 1); // 2 $sort = $this->getQuery('sort'); // price $allParams = $this->getQueryParams(); // ['page' => 2, 'sort' => 'price'] $this->assignVars([ 'request_uri' => $requestUri, 'path' => $path, 'clean_path' => $cleanPath, 'current_url' => $currentUrl, 'home_url' => $homeUrl, 'products_url' => $productsUrl, 'page' => $page, 'sort' => $sort, 'all_params' => $allParams ]); $this->render('url_info');
NexaController menyediakan method untuk mengakses segmen path:
getPathSegments()
- Mendapatkan semua segmen pathgetPathSegment(int $index, string $default = '')
- Mendapatkan segmen path tertentugetSlug(int $index = 0, string $default = '')
- Mendapatkan slug dari pathgetPart(int $index = 0, string $default = '')
- Mendapatkan bagian dari pathgetSlugCount()
- Mendapatkan jumlah sluggetSlugValues()
- Mendapatkan semua nilai slug
// Untuk URL: /products/category/electronics/brand/samsung
public function pathSegments(): void
{
// Mendapatkan semua segmen path
$segments = $this->getPathSegments(); // ['products', 'category', 'electronics', 'brand', 'samsung']
// Mendapatkan segmen tertentu
$segment0 = $this->getPathSegment(0); // products
$segment1 = $this->getPathSegment(1); // category
$segment2 = $this->getPathSegment(2); // electronics
// Mendapatkan slug
$slug0 = $this->getSlug(0); // products
$slug1 = $this->getSlug(1); // category
$slug2 = $this->getSlug(2); // electronics
// Mendapatkan jumlah slug
$slugCount = $this->getSlugCount(); // 5
// Mendapatkan semua nilai slug
$slugValues = $this->getSlugValues(); // ['products', 'category', 'electronics', 'brand', 'samsung']
$this->assignVars([
'segments' => $segments,
'segment0' => $segment0,
'segment1' => $segment1,
'segment2' => $segment2,
'slug0' => $slug0,
'slug1' => $slug1,
'slug2' => $slug2,
'slug_count' => $slugCount,
'slug_values' => $slugValues
]);
$this->render('path_segments');
}
NexaController menyediakan method untuk mengakses headers HTTP dan informasi server:
getHeaders()
- Mendapatkan semua headersgetHeader(string $header, string $default = '')
- Mendapatkan header tertentuhasHeader(string $header)
- Memeriksa keberadaan headergetClientIP()
- Mendapatkan IP clientgetUserAgent()
- Mendapatkan user agentgetServerInfo(?string $key = null)
- Mendapatkan informasi servergetEnvironmentInfo()
- Mendapatkan informasi environment
public function requestInfo(): void
{
// Mendapatkan headers
$allHeaders = $this->getHeaders();
$contentType = $this->getHeader('Content-Type');
$userAgent = $this->getHeader('User-Agent');
$hasAccept = $this->hasHeader('Accept');
// Mendapatkan informasi client
$clientIP = $this->getClientIP();
$userAgentString = $this->getUserAgent();
// Mendapatkan informasi server
$serverSoftware = $this->getServerInfo('SERVER_SOFTWARE');
$documentRoot = $this->getServerInfo('DOCUMENT_ROOT');
$allServerInfo = $this->getServerInfo();
// Mendapatkan informasi environment
$envInfo = $this->getEnvironmentInfo();
$this->assignVars([
'all_headers' => $allHeaders,
'content_type' => $contentType,
'user_agent' => $userAgent,
'has_accept' => $hasAccept,
'client_ip' => $clientIP,
'user_agent_string' => $userAgentString,
'server_software' => $serverSoftware,
'document_root' => $documentRoot,
'all_server_info' => $allServerInfo,
'env_info' => $envInfo
]);
$this->render('request_info');
}
NexaController menyediakan method untuk memeriksa method request dan AJAX:
getRequestMethod()
- Mendapatkan method request (GET, POST, PUT, DELETE)isRequestMethod(string $method)
- Memeriksa apakah request menggunakan method tertentuisPost()
- Memeriksa apakah request adalah POSTisGet()
- Memeriksa apakah request adalah GETisAjax()
- Memeriksa apakah request adalah AJAX
public function handleRequest(): void
{
// Mendapatkan method request
$method = $this->getRequestMethod(); // GET, POST, PUT, DELETE
// Memeriksa method request
$isPut = $this->isRequestMethod('PUT');
$isDelete = $this->isRequestMethod('DELETE');
$isPost = $this->isPost();
$isGet = $this->isGet();
// Memeriksa AJAX request
$isAjax = $this->isAjax();
if ($isAjax) {
// Handle AJAX request
$data = ['success' => true, 'message' => 'AJAX request processed'];
$this->json($data);
return;
}
if ($isPost) {
// Handle POST request
$this->processFormData();
return;
}
if ($isGet) {
// Handle GET request
$this->showForm();
return;
}
if ($isPut) {
// Handle PUT request
$this->updateResource();
return;
}
if ($isDelete) {
// Handle DELETE request
$this->deleteResource();
return;
}
// Default handling
$this->render('default');
}
NexaController menyediakan method untuk validasi input:
validateRequiredFields(array $fields)
- Memvalidasi field yang wajib diisisanitize(string $input)
- Membersihkan input dari karakter berbahayavalidateForm(array $rules, bool $redirectOnError = true, bool $flashErrors = true)
- Memvalidasi formvalidateSingleField(string $field, string $validationType, int $minLength = null, string $customMessage = null)
- Memvalidasi field tunggal
public function register(): void
{
if ($this->isPost()) {
// Validasi field yang wajib diisi
$requiredFields = ['username', 'email', 'password', 'confirm_password'];
$missingFields = $this->validateRequiredFields($requiredFields);
if (!empty($missingFields)) {
$this->setFlash('error', 'Harap isi semua field yang wajib diisi');
$this->redirect('/register');
return;
}
// Sanitize input
$username = $this->sanitize($this->getPost('username'));
$email = $this->sanitize($this->getPost('email'));
// Validasi form dengan aturan validasi
$validationRules = [
'username' => 'required|min:3|max:20|alphanumeric',
'email' => 'required|email',
'password' => 'required|min:8',
'confirm_password' => 'required|same:password'
];
$validationResult = $this->validateForm($validationRules);
if ($validationResult) {
// Form valid, proses registrasi
$this->useModels('User', 'register', [
'username' => $username,
'email' => $email,
'password' => $this->getPost('password')
]);
$this->setFlash('success', 'Registrasi berhasil! Silakan login.');
$this->redirect('/login');
return;
}
// Jika validasi gagal, validateForm() akan otomatis menetapkan flash errors
// dan redirect kembali ke form jika $redirectOnError = true
}
$this->render('auth/register');
}
NexaController menyediakan method untuk menganalisis request:
getRequestAnalytics()
- Mendapatkan analisis requestgetRequestJson()
- Mendapatkan analisis request dalam format JSONassignRequestData(string $varName = 'request_data')
- Menetapkan data request ke templatedebugRequest(bool $detailed = false)
- Menampilkan informasi debug request
public function analyzeRequest(): void
{
// Mendapatkan analisis request
$analytics = $this->getRequestAnalytics();
// Mendapatkan analisis request dalam format JSON
$jsonAnalytics = $this->getRequestJson();
// Menetapkan data request ke template
$this->assignRequestData('request_info');
// Atau menetapkan data analisis secara manual
$this->assignVars([
'analytics' => $analytics,
'json_analytics' => $jsonAnalytics
]);
// Untuk debugging
if ($this->getGet('debug') === '1') {
$this->debugRequest(true);
exit;
}
$this->render('analytics');
}
Berikut adalah beberapa praktik terbaik dalam memproses request: