Menu Navigasi

Tutorial Tutorial Pemrograman Part 48: Advanced Routing dengan Regular Expressions di PHP

AI Generated
29 Desember 2025
17 views
Tutorial Tutorial Pemrograman Part 48: Advanced Routing dengan Regular Expressions di PHP

Pendahuluan

Selamat datang di Part 48 dari seri tutorial pemrograman PHP Zero to Hero! Di part sebelumnya, kita sudah mempelajari tentang middleware. Sekarang, kita akan membahas advanced routing menggunakan regular expressions (regex). Routing adalah jantung dari setiap aplikasi web modern, memungkinkan kita untuk memetakan URL ke tindakan atau controller tertentu. Regex memberikan fleksibilitas yang tak tertandingi dalam mendefinisikan pola URL. Prasyarat untuk tutorial ini adalah pemahaman dasar tentang PHP, konsep routing, dan sedikit familiaritas dengan regular expressions.

Konsep Dasar

Routing dalam aplikasi web dapat dianalogikan dengan sistem pengiriman surat. Setiap URL adalah alamat surat, dan routing berperan sebagai kantor pos yang mengarahkan surat tersebut ke penerima yang tepat (controller/action). Regular expressions (regex) adalah pola yang kita gunakan untuk mencocokkan alamat surat. Dengan regex, kita dapat membuat pola yang sangat fleksibel dan dinamis.

Apa itu Regular Expressions?

Regular expressions adalah urutan karakter yang mendefinisikan sebuah pola pencarian. Mereka sangat berguna untuk mencocokkan, mencari, dan memanipulasi teks berdasarkan pola tertentu. Contoh sederhana: ^/users/([0-9]+)$ akan mencocokkan URL yang dimulai dengan /users/ diikuti oleh satu atau lebih digit angka.

Hands-on Coding

Mari kita bangun sebuah sistem routing sederhana yang menggunakan regular expressions.

Langkah 1: File index.php (Entry Point)

Ini adalah file utama yang menangani semua permintaan.


<?php

// Autoload dependencies (assuming Composer)
require __DIR__ . '/vendor/autoload.php';

// Get the requested URL
$requestUrl = $_SERVER['REQUEST_URI'];
$requestMethod = $_SERVER['REQUEST_METHOD'];

// Define routes as an array of regex patterns and callbacks
$routes = [
    'GET ^/users/([0-9]+)$' => function ($id) {
        // Handle GET request for a specific user by ID
        echo "Getting user with ID: " . $id;
    },
    'POST ^/users$' => function () {
        // Handle POST request to create a new user
        echo "Creating a new user";
    },
    'GET ^/$' => function () {
        // Handle GET request for the homepage
        echo "Welcome to the homepage!";
    },
    'GET ^/products/([a-zA-Z0-9-]+)$' => function ($slug) {
        // Handle GET request for a specific product by slug
        echo "Getting product with slug: " . $slug;
    },
];

$routeFound = false;
foreach ($routes as $pattern => $callback) {
    // Extract the HTTP method from the pattern
    preg_match('/^(GET|POST|PUT|DELETE)\s+(.*)$/', $pattern, $matches);
    $method = $matches[1];
    $regex = $matches[2];

    // Check if the HTTP method matches the request
    if ($method === $requestMethod) {
        if (preg_match('#' . $regex . '#', $requestUrl, $matches)) {
            // Remove the full match from the matches array
            array_shift($matches);

            // Call the callback function with the captured parameters
            call_user_func_array($callback, $matches);
            $routeFound = true;
            break; // Stop after the first match
        }
    }
}

if (!$routeFound) {
    // Handle 404 Not Found
    http_response_code(404);
    echo "404 Not Found";
}

Penjelasan Kode:

  • require __DIR__ . '/vendor/autoload.php';: Mengimpor dependencies yang diinstal menggunakan Composer.
  • $requestUrl = $_SERVER['REQUEST_URI'];: Mendapatkan URL yang diminta dari server.
  • $routes: Array yang mendefinisikan routes. Setiap key adalah regular expression, dan value adalah callback function yang akan dieksekusi jika URL cocok dengan regex.
  • preg_match('#' . $regex . '#', $requestUrl, $matches): Mencocokkan URL dengan regular expression. Jika cocok, hasilnya disimpan di array $matches.
  • call_user_func_array($callback, $matches): Memanggil callback function dengan parameter yang diekstrak dari URL.
  • http_response_code(404);: Mengirimkan kode status HTTP 404 jika tidak ada route yang cocok.

Langkah 2: Instalasi Composer

Pastikan Anda sudah menginstal Composer. Jika belum, unduh dan instal dari getcomposer.org.

Langkah 3: Membuat file composer.json (opsional, jika menggunakan dependencies)

Meskipun contoh kode di atas tidak memerlukan dependencies eksternal, ini adalah praktik yang baik untuk menyertakan file composer.json dalam proyek Anda.


{
    "require": {
        "php": ">=7.4"
    }
}

Common Pitfalls

  • Lupa escape karakter regex: Pastikan untuk escape karakter khusus regex seperti ., +, *, dll. dengan menggunakan backslash (\).
  • Tidak mempertimbangkan HTTP method: Penting untuk membedakan routes berdasarkan HTTP method (GET, POST, PUT, DELETE).
  • Kesalahan dalam pola regex: Pastikan pola regex Anda benar dan sesuai dengan URL yang Anda inginkan. Gunakan alat bantu online seperti regex101.com untuk menguji pola regex Anda.
  • Tidak menangani kasus 404: Selalu sediakan penanganan untuk kasus di mana tidak ada route yang cocok.

Challenge

Tambahkan route untuk menangani permintaan DELETE ke /users/{id} untuk menghapus user berdasarkan ID.

Sumber Referensi

Bagikan: