Yii2 Boilerplate

Hallo sanak famili,

Kali ini saya lagi main-main dengan framework Yii2. Sebelumnya saya berkutat dengan framework CodeIgniter, sudah waktunya nyoba sesuatu yang lain.

Yii ini keren. Canggih, fitur jg banyak. Tapi tidak terlalu rumit dipelajari. Entah kenapa saya lagi males tenggelam dengan teknis koding yang rumit. Lebih baik fokus merancang solusi bagi permasalahan pengguna. Karna akhirnya pengguna tidak terlalu perduli dengan blink-blink teknologi baru pemrograman.

Oke, fokus!
sebagai pembuka saya tidak akan membuat project yg rumit. Cukup CRUD dasar saja sambil menyesuaikan alur coding berdasarkan pengalaman yg sudah didapat. Jadi saya memutuskan untuk membuat Yii2-Boilerplate, satu aplikasi sederhana berisi master data yg umum digunakan. Sehingga bisa jadi dasar project-project lainnya.

Harapannya ini bisa jadi media belajar bersama untuk membuat web/aplikasi menggunakan framework Yii2.

Yii2-Boilerplate ini berisi:

  • Yii2-app-advance
    Template aplikasi advance untuk framework Yii2. Di dalamnya sudah ada pembagian aplikasi untuk frontend, backend & console. Jadi bisa dipisah antara sistem khusus admin & pengguna.
  • Dektrium User Management
    Library untuk mengelola user. Sudah termasuk API untuk Facebook, Google+, GitHub dll.
  • adminLTE
    Template tampilan yg cantik. Responsive, support untuk mobile browser. Contohnya tampilannya bisa dilihat disini.
  • Database wilayah Indonesia
    Dari 34 propinsi, kota, kecamatan hingga kelurahan. Datanya saya ambil datanya dari project GitHub database daerah. Terimakasih untuk master Cahya. Dilengkapi juga dengan google map untuk setiap wilayahnya. Data disesuaikan dengan Permendagri no 39 tahun 2015. Bisa dibilang project ini versi Yii2-nya dari saya. Bedaya paling Primary-Key saya ganti pake autonumber dgn tetap menyimpan nomor daerah sesuai permendagri. Saya penganut system generated key 😀
  • Tambahan pribadi
    Dari saya ada beberapa class tapi yg utama ada access control untuk tiap model dan contoh module di front end. Database daerah dikelola dgn 2 cara, pertama controller langsung di frontend-controller dan kedua module terpisah. Isinya sama saja. Hanya untuk menegaskan perbedaan kalo buat komponen yang saling bercampur dengan module yg mencakup fitur tertentu.

 

Tambahan Pribadi

Dari saya ada bebera class, fungsi serta extend dari komponen bawaan. Tapi yg utama ada 2, yaitu:

1. Access Control tiap Model

Saya tidak biasa pake RBAC untuk mengontrol hak akses pengguna berdasarkan tipenya. Yang biasa saya lakukan hak aksesnya diatur berdasarkan kaitan dirinya terhadap model. Misalnya gini: yang bisa edit nilai siswa adalah guru pelajaran terkait. Berarti hak aksesnya guru tertentu, pelajaran tertentu untuk sekelompok siswa tertentu. Entah apa istilahnya kalo di dunia programing dan juga penerapannya. Hal ini masih jarang dibahas serta disediakan tutorialnya.

Hal ini menarik karena proses pengecekkannya bisa jadi sangat rumit, sedang sangat dibutuhkan di beberapa sisi sistem. Misal gini, saat menampilkan detail suatu data pasti akan dimunculkan beberapa button untuk operasi data tersebut. Misalkan Update. Nah, ketika masuk form update tersebut harus di-cek lagi di controller, perintah ini valid & boleh dijalankan atau tidak. Sesuai user yg sedang login.

Klo code pengecekannya selalu disebutin satu-persatu tiap halaman akan merepotkan. Dan rentan error ketika terjadi perubahan. Oleh karena itu perlu dibuat class sendiri untuk fungsi ini. Klo butuh tinggal dipanggil, klo berubah cukup edit di satu tempat. Class ini jadi satu dengan button generator operasi data. Jadi tiap kali load model sudah ada daftar operasi yg bisa dilakukan serta link/button yg tersedia.

Fitur ini terbagi jadi 2 tipe class extend dari ModelAccess dan ModelOperation. ModelAccess untuk mengatur hak akses ke model seperti menampilkan tabel data & create data baru. Sedang ModelOperation mengelola operasi apa saja yg tersedia untuk suatu model.

 

2. Module Database Daerah

Ini adalah implementasi data wilayah indonesia. Untuk mengelola data ini disediakan modul tersendiri (frontend) dan juga controller frontend. Sebenarnya isinya sama saja. Module ini dibuat hanya sebagai contoh untuk menunjukan perbedaan komponen yg dikelompokkan tersendiri dalam satu module dengan komponen yg bercampur jadi satu di frontend. Secara coding sih lebih rapi tentunya. Satu-satunya yg terasa agak gimana cuma penyebutan namespace. Itupun hanya sedikit saat deklarasi class & use class.

 

Proses Instalasi

langsung saja buka projectnya di GitHub. lalu langkahnya sbb:

1. clone repo
bisa download zip, via git client atau menggunakan NetBeans.

2. install komponen via composer
buka terminal. masuk ke folder project. ketikan perintah :

composer install

3. memulai project Yii
masih di terminal. ketik perintah:

./yii init

bila di linux pastikan file “yii” bisa dieksekusi. Pilih environtment. Klo bingung pilih aja ‘development’ (masih dalam pengembangan)

4. Buat Database
masuk mysql/phpmyadmin, lalu buat database untuk sistem.

5. Set database connetion
edit file common/config/main-local.php. ubah parameter koneksi database yg tertera disitu sesuai konfigurasi mysql Kamu.

6. migrasi database
kembali ke terminal untuk setup tabel sistem di database. ketikan perintah berikut:

./yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations

di boilerplate ini pake user management dektrium/yii2-user.

sampai sini harusnya sistem sudah bisa diakses lewat browser.

7. Setup tabel lainnya
Biar ringkas saya sarankan pake Workbench , tak ada migration. Buka saja filenya database/model.mwb lalu sinkronkan dengan mysql kamu. Nama databasenya diatur sesuai yg dibuat tadi. Nanti struktur tabel di workbench bakal pindah ke mysql.
Kalau tak ada workbench, saya sediakan changelog sql yg bisa diimpor ke mysql di folder database/changelog. impor saja sesuai urutan.

8. Impor data
database wilayah indonesia tersedia di folder database/dump. Diimpor ke mysql urut dari file:

1. region_country.sql
2. region_province.sql
3. region_city.sql
4. region_district.sql
5. region_subdistrict.sql

harus urut karena ada constrain relasi tabel. jadi harus urut dr negara lalu turun sampai kelurahan.

Selesai!
coba cek lewat browser. eksplor semua menu yg tersedia di panel kiri .
contoh yg sudah jadi ada disini.

Selamat mencoba, semoga bermanfaat.
nanti klo ada update saya kabari lagi.
Jangan sungkan untuk komen ya.
🙂