Application Structure

21
Oleh: Ahmad Syauqi Ahsan

Transcript of Application Structure

Page 1: Application Structure

Oleh: Ahmad Syauqi Ahsan

Page 2: Application Structure

▪ Aplikasi Yii2 menganut pola desain MVC (Model-View-Controller)▪ Model: merepresentasikan data, logika bisnis, serta aturan-aturan yang ada.

▪ View: representasi keluaran dari model.

▪ Controller: menerima masukan dan merubahnya menjadi perintah untuk mengakses model dan menampilkan view.

▪ Selain MVC, sebuah aplikasi Yii2 juga memiliki:▪ Entry scripts: PHP script yang bias diakses langsung oleh pengguna. Mereka merupakan

“awal” dari semua request ke aplikasi.

▪ Application: merupakan objek yang dapat diakses secara global. Objek ini mengelola berbagai komponen dan mengkoordinasikan mereka untuk memenuhi request.

▪ Komponen application: merupakan objek-objek yang tergabung dengan application dan menyediakan berbagai layanan untuk memenuhi request.

▪ Modules: merupakan sebuah paket yang didalamnya terdapat MVC secara komplit. Sebuah aplikasi Yii2 dapat dibuat dan dikelola menjadi beberapa modules.

▪ Filters: merepresentasikan kode yang perlu untuk dijalankan sebelum dan/atau sesudah sebuah request ditangani oleh controller.

▪ Widgets: merupakan objek yang biasanya “dilekatkan” pada view untuk mempermudah pembentukan tampilan.

2

Page 3: Application Structure

3

Page 4: Application Structure

▪ Entry script merupakan mata rantai pertama dari aplikasi Yii2. Setiap aplikasi Yii (baik aplikasi web maupun aplikasi console) harus memiliki 1 entry script.

▪ Entry script untuk aplikasi web biasanya bernama index.php. File ini harus diletakkan pada direktori yang dapat diakses melalui web.

▪ Entry script biasanya digunakan untuk hal-hal berikut ini:▪ Mendefinisikan konstanta global

▪ Meregister Composer Autoloader

▪ Mengikutsertakaan class Yii

▪ Memuat komfigurasi aplikasi

▪ Membuat dan mengkonfigurasi Instance dari aplikasi

▪ Memanggil fungsi yii\base\Application::run() untuk memproses permintaan

▪ Note: selain dapat digunakan untuk membuat aplikasi web, Yii2 juga dapat digunakan untuk membuat aplikasi console.

4

Page 5: Application Structure

5

Page 6: Application Structure

▪ Application merupakan objek yang mengelola keseluruhan struktur dan siklus hidup dari aplikasi Yii2.

▪ Setiap aplikasi Yii2 mempunyai sebuah objek aplikasi yang dibuat di entry script.

▪ Objek aplikasi ini dapat diakses secara global melalui \Yii::$app.

▪ Konfigurasi dari application juga akan dimuat bersamaan dengan pembuatan application di entry script. File konfigurasi untuk basic template biasanya bernama web.php.

▪ File konfigurasi berisi property, component, dan module yang digunakan oleh aplikasi.

6

Page 7: Application Structure

▪ Property dari aplikasi Yii2 dapat diakses melalui \Yii::$app->nama_property.

▪ Berikut ini adalah required property dari aplikasi Yii.▪ Yii\base\Application::id : adalah property yang menyimpan id dari aplikasi. ID ini bersifat

unik dan berguna untuk membedakan aplikasi satu dengan lainnya. Gunakan hanya alphanumeric untuk id.

▪ Yii\base\Application::basePath : adalah property yang digunakan untuk menentukan root directory dari aplikasi.

▪ Berikut ini adalah beberapa property lainnya.▪ Yii\base\Application::name : untuk menyimpan nama dari aplikasi.

▪ Yii\base\Application::components : merupakan property yang digunakan untuk menentukan komponen-komponen yang dapat digunakan oleh aplikasi.

▪ Yii\base\Application::modules : merupakan property yang digunakan untuk menentukan modul-modul yang dapat digunakan oleh aplikasi.

▪ Yii\base\Application::defaultRoute: untuk menentukan route yang akan digunakan jika ada request yang tidak menyebutkan route yang diminta. Nilai default dari property ini adalah site/index.

7

Page 8: Application Structure

▪ Sebuah aplikasi Yii2 dibentuk dari beberapa komponen yang menyediakan layanan yang berbeda-beda.

▪ Sebagai contoh, komponen urlManager bertanggung jawab untuk menentukan rute dari sebuah request. Komponen db menyediakan layanan terkait dengan penggunaan database. Dan lain sebagainya.

▪ Komponen dari aplikasi akan dibuat ketika komponen tersebut digunakan untuk pertama kali.

▪ Berikut ini beberapa komponen inti dari aplikasi Yii2:

▪ “db” : mengelola hubungan dengan database.

▪ “errorHandler” : menangani error dan exception pada PHP.

▪ “user” : menangani otentikasi user

▪ Dan lain-lain

8

Page 9: Application Structure

▪ Controller adalah bagian dari arsitektur MVC yang bertugas untuk menerima permintaan (request) dan memberikan tangapan (response).

▪ Controller akan menerima permintaan, meneruskan permintaan ke model, memasukkan hasil dari pemrosesan dari model ke dalam view, dan kemudian membentuk tanggapan.

▪ Nama file php dari sebuah controller mengikuti format ControlleridController.php. Sebagai contoh, file JurusanController.phpmerupakan file untuk controller dengan id jurusan.

9

Page 10: Application Structure

▪ Sebuah controller dibentuk dari satu atau beberapa actions.

▪ ActionID merupakan kata unik yang digunakan untuk membedakan action satu dengan action lainnya dalam sebuah controller.

▪ ActionID ditulis dalam format “actionActionID”. Contoh: actionCreate().

▪ Pengguna dapat mengakses action dari controller menggunakan route dengan format “controllerID/actionID”.Sebagai contoh, action “create” dari controller “Jurusan” dapat diakses melalui route “jurusan/create”

▪ Secara default, action “index” akan dipanggil jika dalam request hanya menyebutkan nama controller saja (tanpa nama action).

▪ Action default dapat di ganti melalui property defaultAction.

10

Page 11: Application Structure

▪ Di dalam aplikasi yang didesain dengan baik, sebuah controller biasanya berukuran sangat kecil, dan untuk setiap action hanya berisi beberapa baris kode saja.

▪ Secara garis besar dapat disimpulkan bahwa controller:

▪ Dapat mengakses data permintaan (request) seperti HTTP headers, cookies, request parameter, dan lain-lain.

▪ Dapat memanggil methods dari models atau dari components lain.

▪ Dapat menggunakan views untuk membentuk response (keluaran).

▪ Seharusnya tidak memproses data permintaan (request). Pemrosesan ini harusnya dilakukan dalam models.

▪ Seharusnya tidak mengikutsertakan kode HTML. Kode HTML lebih baik diletakkan pada views.

11

Page 12: Application Structure

▪ Model adalah bagian dari arsitektur MVC.

▪ Model adalah objek yang digunakan untuk merepresentasikan data, aturan-aturan, dan logika bisnis.

▪ Model dapat dihubungkan dengan table di sebuah database ataupun berdiri sendiri.

▪ Sebuah model dapat memiliki attributes, attribute labels, validation rules, dll.

▪ Attributes merepresentasikan data dalam sebuah model. ▪ Model yang dihubungkan dengan table di database secara otomatis menjadikan seluruh

field dalam table tersebut sebagai atributnya.

▪ Atribut dapat ditambahkan dengan cara seperti membuat variable.

▪ Atributes dapat diakses secara normal atau seperti mengakses array.$model->test = ‘contoh’; //atau $model[‘test’] = ‘contoh’;

12

Page 13: Application Structure

▪ Attribute Labels adalah label yang ditampilkan pada form untuk setiap attribute.

▪ Jika model dibuat menggunakan Gii, maka semua field dalam table akan dibuatkan attribute labels-nya secara otomatis.

▪ Validasi: setiap data untuk sebuah model yang diterima dari pengguna harus divalidasi terlebih dahulu. Contoh validasi: ▪ Jumlah huruf maksimal untuk no telepon tidak boleh

melebihi 15.

▪ Email harus sesuai dengan bentuk penulisan email yang valid.

▪ Dan lain-lain.

▪ Proses validasi ini dapat diatur melalui method rules.

13

Page 14: Application Structure

▪ Secara garis besar, sebuah model:

▪ Dapat berisi atribut untuk merepresentasikan data bisnis.

▪ Dapat berisi validation rules (aturan validasi) untuk memastikan validitas dan integritas data

▪ Dapat berisi metode-metode untuk mengimplementasikan logika bisnis.

▪ Seharusnya tidak mengakses request, session, atau environtment data yang lain secara langsung. Data-data ini harus dimasukkan ke dalam model oleh controller.

▪ Seharusnya tidak mengikutsertakan kode HTML. Kode HTML lebih baik diletakkan pada views.

▪ Seharusnya tidak memiliki scenario yang terlalu banyak.

14

Page 15: Application Structure

▪ View adalah bagian dari arsitektur MVC yang digunakan untuk menampilkan data ke pengguna.

▪ View dibentuk menggunakan gabungan dari kode PHP dan HTML.

▪ Dengan pertimbangan keamanan (untuk menghindari cross-site-scripting), terapkan metode pemeriksaan untuk menampilkan data yang dimasukkan oleh pengguna.▪ Gunakan metode yii\helpers\Html::encode() untuk menampilkan data teks

▪ Gunakan metode yii\helpers\HtmlPurifier::process() untuk menampilkan data html

15

Page 16: Application Structure

▪ Sebuah view dapat di-render (dipanggil) dari controller.

▪ Dari controller, sebuah view dapat dipanggil dengan salah satu metode berikut:

▪ render(): memanggil view dan menerapkan layout

▪ renderPartial(): memanggil view tanpa layout apapun

▪ renderAjax(): memanggil view tanpa layout, dengan mengikutsertakan semua js dan css. Biasa digunakan untuk merespon request Ajax.

▪ renderFile() dan renderContent(): dua metode ini relative jarang digunakan.

▪ Beberapa views yang di-render dari sebuah controller yang sama harus diletakkan di dalam sebuah direktori yang sama pula.Contoh: semua view yang di-render dari JurusanController diletakkan pada directory "jurusan".

16

Page 17: Application Structure

▪ Layouts adalah views special yang digunakan untuk menampilkan bagian yang sama untuk semua (atau beberapa) views yang ada pada sebuah aplikasi Yii.

▪ Secara default, terdapat sebuah layout dengan nama main.php.

▪ Tampilan umum (yang dimunculkan pada setiap halaman) dari sebuah aplikasi Yii, seperti menu, diletakkan dalam file main.php ini.

17

Page 18: Application Structure

▪ Filters merupakan sebuah objek yang dieksekusi sebelum dan/atau sesudah actionpada controller.

▪ Filter dapat digunakan dengan meletakkannya di dalam metode behaviors()pada sebuah controller.

▪ Contoh built-in filter yang sering digunakan adalah AccessControl. Filter ini berfungsi untuk memastikan pengguna yang mengakses sebuah action memenuhi syarat tertentu. (lihat kode program disamping)

▪ Built-in filter lain yang cukup berguna adalah: ▪ HttpCache: untuk mengimplementasikan

caching di sisi client.

▪ PageCache: untuk mengimplementasikan caching di sisi server.

18

// in Controller

use yii\filters\AccessControl;

public function behaviors()

{

return [

'access' => [

'class' => AccessControl::className(),

'only' => ['create', 'update'],

'rules' => [

// allow authenticated users

[

'allow' => true,

'roles' => ['@'],

],

// everything else is denied by default

],

],

];

}

Page 19: Application Structure

▪ Asset pada aplikasi Yii merupakan file yang menjadi referensi dari sebuah halaman web (contoh: file css atau js)

▪ Untuk dapat digunakan, sebuah asset harus diletakkan pada directory yang dapat diakses dari internet.

▪ Pada aplikasi Yii2, direkomendasikan untuk mengelola asset menggunakan Asset Bundles▪ File .css atau .js tidak secara langsung di-include-kan

dalam view.

▪ Asset Bundles di-include-kan pada view dengan memanggil metode register().

▪ Dengan cara ini, file asset yang asli tidak harus diletakkan pada directory yang dapat diakses dari internet. Yii yang akan meng-copy-kannya secara otomatis.

▪ Jika terdapat perubahan pada file asset, misalkan setelah melakukan upgrade, file asset otomatis akan diperbaharui.

▪ Note: Widget akan secara otomatis meng-include-kan file asset yang dibutuhkannya.

19

// file assets/AppAsset.php

<?php

namespace app\assets;

use yii\web\AssetBundle;

class FontAwesomeAsset extends AssetBundle

{

public $baseUrl = '@web';

public $css = [

'css/site.css',

];

public $js = [

];

public $depends = [

'yii\web\YiiAsset',

'yii\bootstrap\BootstrapAsset',

];

}

// file views/layouts/main.php

use app\assets\AppAsset;

AppAsset::register($this);

Page 20: Application Structure

▪ Untuk aplikasi frontend:

▪ Buat CRUD untuk item (jika belum dibuat pada latihan sebelumnya). Kemudian hapus semua action kecuali action "index" dan "view".

▪ Pada layouts/main, tambahkan menu "Produk" yang mengarah ke route "item/index".

▪ Atur konfigurasi aplikasi sehingga route "item/index" menjadi default route.

▪ Beri nama aplikasi anda!

▪ "Toko Baru" untuk aplikasi frontend dan "Admin Toko Baru" untuk aplikasi backend.

▪ Note: Gunakan property “name” pada file konfigurasi dari aplikasi anda)

▪ Tampilkan property “name” tersebut sebagai awalan untuk title dari semua halaman pada aplikasi anda! (Note: title diatur melalui view)

20

Page 21: Application Structure

21