Simple PHP Framework

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

directory.PNG

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

htaccess.PNG

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

index.PNG

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

autoload.PNG

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

helper.PNG

  • 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

core.PNG

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

router_1.PNG

  • 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.

router_2.PNG

  • 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

app.PNG

  • 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

routes.PNG

  • 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

base_controller.PNG

  • 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

bootstrap_public.PNG

Berisi bootstrap css untuk css external dari project framework yang akan diterapkan pada tutorial kali ini.

Resources Views

resource_views.PNG

Berikut adalah path dari resources views yang akan digunakan.

master: header.php

master_header.PNG

Berikut adalah html master untuk header dari view.

master: footer.php

master_footer.PNG

Sebagai penghubung akhir dari template view framework.

home/index.php

view_home_indx.PNG

Sebagai view untuk home atau halaman utama dan pertama dari website.

profile/index.php

view_profile_index.PNG

sebagai halaman untuk profile.

App/Controllers/HomeController.php

homecontroller.PNG

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

profilecontroller.PNG

  • memiliki namespace App\Controllers.
  • merupakan class turunan dari App\Controllers\Controller.
  • index: digunakan untuk merender view di resources/views/profile/index.php.

Result

result_home.PNG

untuk routes : / atau halaman awal(home page).

result_profile.PNG

untuk routes: /profile atau halaman profile.

Leave a comment