{{ message }}

Experiment Membuat Router URL Dengan PHP Native

02/08/2017 | PHP
Experiment Membuat Router URL Dengan PHP Native

Terkadang kita ingin untuk membuat URL website kita terlihat bersih. Anda bisa bayangkan URL sering dipakai untuk meletakan umpan variable misalnya ID dari sebuah konten ataupun kode unik. Jika Anda meletakan umpan tersebut maka URL Anda akan sedikit terlihat kurang readable dan tidak terlalu baik untuk SEO website Anda. Untuk itu kita ingin membuat URL yg terlihat readable tapi kita tidak ingin kehilangan umpan variable itu bukan? karena umpan tersebut digunakan sebagai key dari suatu konten. Jadi kali ini kita dapat mencoba membuat sebuah router di PHP yaitu pengarah URL tersebut ke konten yg kita inginkan.

Hasil akhir routing URL yang mau kita buat kali ini biasanya di CMS WordPress dapat disebut permalink. Ada juga yg lebih memilih framework MVC agar lebih mudah utk membuat router seperti ini Anda dapat membaca pembahasan tentang router-nya Code Igniter untuk itu. Namun bagaimana jika website/aplikasi Anda sudah terlanjur dibuat dengan PHP Native, maka ikuti saja web experiment berikut ini.

Mengambil URI Setelah index.php

Kalau begitu pertama-tama saya akan mengambil potongan URI dari sebuah URL lengkap. Buatlah file index.php dengan kode program seperti ini;

<?php 
 
$pathInfo = $_SERVER['PATH_INFO'];
echo $pathInfo;

Lalu melalui web browser eksekusi-lah program PHP tersebut dengan URL seperti ini;

http://domainanda.com/index.php/test/parsing-saja

Maka hasil yg ditampilkan web browser adalah;

/test/parsing-aja

Sekarang dapat kita mengerti untuk mengambil URI setelah index.php adalah dengan menggunakan variable $_SERVER[‘PATH_INFO’] bawaannya PHP.

Parsing dan Routing

Pertama-tama tujuan kita adalah membuat mungkin URL yg seperti ini;

http://domainanda.com/index.php/berita/wisata-kuliner

Dan tujuan kita adalah mengarahkan URL tersebut ke class Berita dan method actionWisataKuliner. Untuk itu perlu diingat setiap mengeksekusi program PHP yg akan saya jabarkan nanti, pastikan URL yg dibuka selalu ada akhiran “/berita/wisata-kuliner” setelah index.php. Bukalah file index.php tadi lagi lalu tambahkanlah Class Berita dan method actionWisataKuliner;

<?php
 
class Berita {
 
  public function actionWisataKuliner() {
    echo 'wisata kuliner';
  }
 
}
 
$pathInfo = $_SERVER['PATH_INFO'];
echo $pathInfo;

Yg perlu kita lakukan sekarang adalah memparsing URL dari $pathInfo. Caranya;

<?php 
.......
.......
 
$pathInfo = $_SERVER['PATH_INFO'];
$explodedPathInfo = explode('/', $pathInfo);
 
$className = ucfirst($explodedPathInfo[1]);
 
$methodName = $explodedPathInfo[2];
$explodedMethodName = explode('-', $methodName);
 
$methodName = '';
 
foreach($explodedMethodName as $iMethodName) {
  $methodName .= ucfirst($iMethodName);
}
 
$methodName = 'action'.$methodName;
 
echo 'Nama Class: '.$className.'<br>Method Name:'.$methodName;

Maka hasil dari program diatas adalah;

Nama Class: Berita
Method Name: actionWisataKuliner

Tugas kita sekarang adalah memanggil Class dan Method kita tadi, menggunakan nama Class dan Method yg telah kita parsing tadi, hapuslah baris terakhir yg berisi perintah echo tadi (line 21) dengan ini;

$object = new $className();
$object->$methodName();

Coba jalankan maka hasilnya adalah;

wisata kuliner

Sekarang jika Anda membuat URI kategori baru di class berita misalnya /berita/teknologi. Maka Anda dapat dengan mudah menambah method actionTeknologi dan router akan mengarahkan request URL tersebut ke method Anda. Jika Anda membuka URI /berita/selayang-pandang maka methodnya menjadi actionSelayangPandang, jika /berita/terkini maka methodnya actionTerkini.

Permalink dan Slug

Sekarang kita ingin ada parameter yg berubah-ubah di URL, kita dapat menyebutnya slug disini. misalnya Anda ingin membuat URL /berita/wisata-kuliner/jajanan-pagi ataupun /berita/wisata-kuliner/tempat-favorit dan dalam hal ini jajanan-pagi dan tempat-favorit berasal dari table di database yg isinya dapat berubah-ubah. Maka ikuti tutorial saya berikut ini, ubahlah pemanggilan Class dan Method kita tadi menjadi seperti ini;

// Slug
$slugName = $explodedPathInfo[3];
 
$object = new $className();
$object->$methodName($slugName);

Lalu tangkaplah variablenya di Class seperti ini;

class Berita {
 
  public function actionWisataKuliner($slug) {
    echo 'wisata kuliner<br>';
    echo 'isi dari slug adalah: '.$slug;
  }
 
}

Maka jika Anda membuka alamat;

http://domainanda.com/index.php/berita/wisata-kuliner/jajanan-pagi

Slug-nya adalah jajanan-pagi dan itu menjadi suatu key dari konten yg isi keynya dapat berubah-ubah. Jika Anda mengerti maksud saya maka di method actionWisataKuliner sekarang Anda dapat mengolah slug tadi sebagai primary key di table konten Anda di database. Lalu Anda dapat melakukan query misalnya “select * from tb_berita where slug=”.$slug, pastikan Anda membuat field slug dahulu dan mengisinya di table konten Anda.

Source Code Lengkap

<?php
 
class Berita {
 
  public function actionWisataKuliner($slug) {
    echo 'wisata kuliner<br>';
    echo 'isi dari slug adalah: '.$slug;
  }
 
}
 
$pathInfo = $_SERVER['PATH_INFO'];
$explodedPathInfo = explode('/', $pathInfo);
 
// Class
$className = ucfirst($explodedPathInfo[1]);
 
// Method
$methodName = $explodedPathInfo[2];
$explodedMethodName = explode('-', $methodName);
 
$methodName = '';
 
foreach($explodedMethodName as $iMethodName) {
  $methodName .= ucfirst($iMethodName);
}
 
$methodName = 'action'.$methodName;
 
// Slug
$slugName = $explodedPathInfo[3];
 
$object = new $className();
$object->$methodName($slugName);
 
?>