Hai, kembali lagi di tutorial web design dan development, pada kesempatan kali ini saya akan memberikan tutorial mengenai langkah-langkah dalam membangun framework php yang simple.
Framework ini bukanlah framework php seperti pada umumnya yang kita ketahui, namun hanya sekedar bagaimana bagian inti dari framework lain tersebut bekerja dan seperti apa source code nya…
Directory Path
Berikut adalah struktur directory yang akan kita gunakan dalam membangun framework php kita.
- App: digunakan sebagai directory utama dalam memanipulasi framework.
- App/Controllers: digunakan sebagai main directory untuk controller-controller dalam framework.
- routes.php: sebagai main routes dari framework.
- Kernel: digunakan sebagai core dari framework, dimana merupakan bagian inti dari framework ini.
- Kernel/Lib: sebagai library class dari framework, dimana langkah inisialisasi dari framework dijalankan.
- public: sebagai directory untuk file-file external seperti css, javascript dll.
- resources: sebagai directory untuk views dari framework, dimana sesuai dengan konsep awal yaitu model view controller, adapun fungsi dari folder ini adalah sebagai storage cache, seperti session token dll.
- .htaccess: file untuk mengubah pattern url dari browser.
- index.php: file utama sebagai initializator dari framework, serta pengincludetan module.
.htaccess file
Digunakan untuk mengubah url pattern yang akan digunakan untuk mendefinisikan current route yang tersedia atau yang telah terdaftar oleh framework.
Dari penjelasan tersebut menunjukkan fungsi utama file .htaccess dari framework ini, namun untuk .htaccess pada umumnya dapat digunakan untuk hal lain seperti memberikan autentikasi pada user yang diinginkan saja dll.
- RewriteEngine: digunakan untuk memberikan status untuk dapat mengubah pattern url.
- RewriteCond: sebagai rewrite condition dari htaccess, terdapat 2 karena untuk memberika kondisi pada front controller.
- RewriteRule: sebagai rule dari hasil pengubahan pada front controller dari framework.
index.php
Mengompile atau menginclude setiap kernel module dari framework yang diperlukan, adapun menjalankan session untuk menerima request dari setiap SESSION, serta melakukan inisialisasi dengan memanggil constructor dari \Kernel\Lib\App di folder Kernel/Lib.
Kernel/autoload.php
spl_autoload_register digunakan untuk mendaftarkan setiap class name yang kita use, atau kita panggil. Fungsi ini akan menerima parameter pertama berupa function untuk menjalankan proses pengincludedan file dari class yang kita gunakan atau kita panggil, sehingga tidak perlu untuk menginclude di setiap class.
Kernel/helper.php
- function dd: istilah untuk “dump and die” digunakan sebagai print_r atau var_dump dari object.
- function url: digunakan untuk mengembalikan url dengan tambahan berdasarkan static BASE_URL yang telah di define.
- function redirect: digunakan untuk me-redirect ke halaman tertentu berdasarkan tujuan atau path.
Kernel/core.php
Digunakan untuk mendefiniskan static variabel sehingga dapat digunakan oleh framework kernel serta untuk memudahkan dalam menentukan variabel yang telah disusun seperti BASE_URL ataupun ACTIVE_ROUTE untuk mengecek current route pattern dari browser url.
Kernel/Lib/Router.php
- memiliki namespace Kernel\Lib.
- routes[]: sebagai array property untuk mendefinisikan list dari routes yang terdaftar dari framework.
- add: digunakan untuk menambahkan route ke routes property sebagai list dari route.
- route: digunakan untuk melakukan routing sesuai dengan current route seperti yang telah di set di file Kernel/core.php.
Pada pengecekan if pertama akan mengecek apakah route terdapat di route list, selanjutnya akan mengecek apakah class dari route controller exists atau not exists, selanjutnya akan mengecek keberadaan method dari class yang terdaftar di base app controller, yang terakhir akan mengecek apakah terdapat query_string atau tidak, jika ada maka akan mengecek lagi tipe dari request method untuk menentukan apakah memiliki method GET atau POST.
Setiap if jika false akan mengembalikan exception error, sesuai dengan setiap sequences.
Kernel/Lib/App.php
- memiliki namespace Kernel\Lib.
- __construct: digunakan sebagai method yang dipanggil ketika mendefine class atau memanggil class, pada method ini akan menset route property dengan ACTIVE_ROUTE atau route yang sedang aktif.
- init: function yang digunakan untuk menjalankan atau menginisialisasi proses routing.
App/routes.php
- mendefine class Router di kernel ke variabel.
- menambahkan route pattern dengan controller beserta functionnya.
- mengembalikan nilai berupa object class dari Router dengan route list yang telah terupdate.
App/Controllers/Controller.php
- memiliki namespace App\Controllers.
- merupakan class parent untuk memanggil method view yang digunakan untuk merender view dengan master template yang telah di-include, serta digunakan untuk mengirimkan variabel melalui key array sehingga dapat diambil oleh view.
public
Berisi bootstrap css untuk css external dari project framework yang akan diterapkan pada tutorial kali ini.
Resources Views
Berikut adalah path dari resources views yang akan digunakan.
master: header.php
Berikut adalah html master untuk header dari view.
master: footer.php
Sebagai penghubung akhir dari template view framework.
home/index.php
Sebagai view untuk home atau halaman utama dan pertama dari website.
profile/index.php
sebagai halaman untuk profile.
App/Controllers/HomeController.php
Digunakan sebagai controller untuk halaman pertama dari website.
- memiliki namespace App\Controllers.
- merupakan class turunan dari App\Controllers\Controller.
- index: sebagai method yang terdaftar dari route framework, digunakan untuk merender view di resources/views/home/index.php dengan mengirimkan parameter berupa message dan quotes untuk dapat digunakan di view.
App/Controllers/ProfileController.php
- memiliki namespace App\Controllers.
- merupakan class turunan dari App\Controllers\Controller.
- index: digunakan untuk merender view di resources/views/profile/index.php.
Result
untuk routes : / atau halaman awal(home page).
untuk routes: /profile atau halaman profile.