Tuesday, July 30, 2019

Yuk Belajar Yii2 part 6




Pada diskusi kita kemarn kita membahas bagaimana cara membuat class dari Model, Cotroller dan View menggunan fasilitas dari Yii yang bernama Gii, pada diskusi kita kali ini kita akann membahas hasil dari Gii Generator dan mengupdate code yang dihasilkan Gii sesuai kebutuhan kita.

Model

Sebenarnya kita pernah membahas model pada bagian lain dari seri ini, saat ini akan kita bahas kembali agar memperjelas pemahaman kita tentang model, dan juga kerena moleh yang kita buat sekarag di create melalui gii.
Model pertama yang akan kita bahas adalah Role.php, Hasil Code Generator dari Gii adalah seperti :
<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "role".
 *
 * @property int $id
 * @property string $role_akses
 * @property string $nama
 *
 * @property User[] $users
 */
class Role extends \yii\db\ActiveRecord
{
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'role';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        /* off */
        return [
            [['role_akses', 'nama'], 'required'],
            [['role_akses'], 'integer'],
            [['nama'], 'string', 'max' => 45],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'role_akses' => 'Role Akses',
            'nama' => 'Nama',
        ];
        /* on */
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getUsers()
    {
      return $this->hasMany(User::className(), ['role_id' =>'id']);
    }
}
  • namespace, telah kita bahas dalam diskusi sebelumnya, secara sederhana namespace adalah URI atau lokasi tempat class berada. pada kasus ini, dapat dibaca seperti class ini berada di app/models.
  • use, secara sederhana dapat diartikan deklarasi class lain yang digunakan pada class ini.
  • class Role extends \yii\db\ActiveRecord, adalah deklarasi dari class ini, yang merupakan inheritance dari class ActiveRecord. Deklarasi ini bisa juga didekarasikanseperti class Role extend ActiveRecord, dengan catatan kita harus mendeklarasikan ActiveRecord dapa Use . Yang perlu diperhatikan adalah Gii secara default mebuat model yang merupakan inheritance dari ActiveRecord.
  • public static function tableName(), mendeklarasikan/meberitahukan model bahwa dalam model ini kita menggunakan tabel role dari database.
  • public function rules(), ini adalah methode yang penting karena dalam method ini kita mendeklarasikan rule dari validasi yang digunakan ketika method validation() dijalankan. Gii mengcreate fungsi dari rule sesuai dengan validasi dan tipedata kita di database.
    [['role_akses', 'nama'], 'required'], artinya role_akses dan nama tidak boleh kosong. required sama seperti NotNull atau tudak boleh kosong.
    [['role_akses'], 'integer'], artinya role_akses harus bertipe integer.
    [['nama'], 'string', 'max' => 45], string artinya input harus berupa string, max=>45 artinya panjang input maximal adalah 45 karakter.
    untuk rule lengkapnya bis di lihat di link di bawah ini : https://www.yiiframework.com/doc/guide/2.0/en/input-validation
  • public function attributeLabels(), merepresentasikan nama field ketika digunaan dalam form, Grid view atau lainya. misalnya 'role_akses' => 'Role Akses', kira kira akan menghasilkan role_akses ketika di form input labelnya akan menjadi Role Akses.
  • public function getUsers(), adalah method yangg menghubungkan, model role dengan model User, dengan penghubung berupa :
    return $this->hasMany(User::className(), ['role_id' => 'id']);
    catatan
    hasMany dan hasOne merupakan method dari class baseActiveRecord yang merupakan parent class dari ActiveRecord
    HasMany dan HasOne adalah Relation antar tabel dalam database. (User::className(), ['role_id' => 'id']) dapat diartikan method terhubung ke model User dengan foreinKey role_id.
Model selanjutnya yang akan kita bahas adalah model User.php, model ini sebenarnya tidak kita create dengan Gii, tetapi model ini sudah di sediakan oleh Yii2,umumnya digunakan untuk Autentication dan/atau Autorization. Untuk sekarang kita hanya akan tentang link model ini dengan model lain pembahasan lebihlanjut tentang User model akan di bahas di bagian lain ketika kita membahas Autentication dan Autorization.
Dari class diagram pada part04 dari seri ini, kita melihat bahwa model user terhubung dengan model Role, Dosen dan Mahasiswa oleh karena itu kita akan menambahkan code berikut pada bagian paling bawah dari class :
    public function getDosen()
    {
        return $this->hasMany(Dosen::className(), [
            'user_id' => 'id'
        ]);
    }

    public function getMahasiswa()
    {
        return $this->hasMany(Mahasiswa::className(), [
            'user_id' => 'id'
        ]);
    }

    public function getRole()
    {
        return $this->hasOne(Role::className(), [
            'id' => 'role_id'
        ]);
    }
pada code diatas kita mendeklarasikan method getDosen() yang menghubungkan relasi antara User.php dan Dosen.php kemudian ada getMahasiswa() dan getRole() yang melakuka mirip seperti getDosen().
Yang ingin ditegaskan dalam bagian ini adalah :
public function getRole()
 {
     return $this->hasOne(Role::className(), [
     'id' => 'role_id'
     ]);
 }
Jika tadi dalam model Role.php kita melihat return $this-> hasMany (User::className(), ['role_id' =>'id']); maka pada model ini kita mendeklarasikan sebaliknya, sehingga relasi One To many terpenuhi. (Karena setahu saya Yii hanaya mengenal HasOne dan HasMany).
Selanjutnya pada deklarasi method pada getUsers() yang dicreate oleh Gii akan berupa Jamak karena secara naturalnya Role mempunyai banyak User, Mungkin ini hambatan bahasa kita maka, agar lebih bersahabat dengan bahasa kita kita akan rubah menjadi getUser().
Untuk model lainya tidak akan kita bahas secara detail karena penjelasanya akan mirip seperti kedua penjelasandi atas, tetapi, Sebaiknya kita perhatikan tiap modelnya dan kita ubah fungsi yang memiliki relasi HasMany menjadi bentuk Singular (tunggal). Misalnya seperti GetUsers() mejadi GetUser().
Beberapa Framework sangat ketat dalam aturan penamaan (naming conventions), biasanya aturan ini diterapkan pada model dan controllernya. misalnya : CakePhp, FuelPHP atau yang lainya. Yii juga menerapkanya, tetapi tidak ketat, jadi kita dengan mudah dapat membuat nama class sesuai yang kita mau, meskipun masih lebih baik mengikuti aturan yang mengikuti standar.
untuk mengetahui sabagian dari aturan aturan ini kita bisa melihat melalui link ini https://www.php-fig.org/

Controller

Untuk sedikit membedakan dengan pembahasan model, Controller pertama yang akan kita bahas adalah RuangKelasController.php, alasanya seserhana saja karena model dari ruangkelasContoller.php sama seperti RoleController.php tidak bergantung pada model lain.
<?php
namespace app\controllers;

use Yii;
use app\models\RuangKelas;
use yii\data\ActiveDataProvider;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;


class RuangKelasController extends Controller
{

    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['POST'],
                ],
            ],
        ];
    }


    public function actionIndex()
    {
        $dataProvider = new ActiveDataProvider([
            'query' => RuangKelas::find(),
        ]);

        return $this->render('index', [
            'dataProvider' => $dataProvider,
        ]);
    }


    public function actionView($id)
    {
        return $this->render('view', [
            'model' => $this->findModel($id),
        ]);
    }


    public function actionCreate()
    {
        $model = new RuangKelas();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }

        return $this->render('create', [
            'model' => $model,
        ]);
    }


    public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }

        return $this->render('update', [
            'model' => $model,
        ]);
    }


    public function actionDelete($id)
    {
        $this->findModel($id)->delete();

        return $this->redirect(['index']);
    }


    protected function findModel($id)
    {
        if (($model = RuangKelas::findOne($id)) !== null) {
            return $model;
        }

        throw new NotFoundHttpException('The requested page does not exist.');
    }
}
Kode di atas sama dengan kodeyang dihasilkan oleh Gii, hanya untuk kenyamanana diskusi kita, saya menghapus barsi komentarnya.
sama seperti model kita juga pernah menbahas Controller pada bagan lain dari seri ini. Disini kita akan ulangi lagi sedikit tentang Controller.
  • use, merupakan deklarasi dari class lain yang digunakan oleh controller.
    Pada bagian deklaras perhatikan bagan use app\models\RuangKelas; ini artinya kita mendeklarasikan/memanggil/menggunakan model RuangKelas.php yang sebeumnyatelah kita create.
  • class RuangKelasController extends Controller, ini adalah part deklarasi dari class. penamaanya sesuai dengan mana file. Umumnya class controller merupakan class turunan dari Controller.php.
  • public function behaviors() dan 'class' => VerbFilter::className(), penjelasan sederhanya, behaviors sesuai dengan artinya yaitu kebiasaan. Method bahaviors adalah method yang akan mempengaruhi kebiasaa yang akan dilakukan class ini. Jika kita melihat dari sudut pandang yii secara teknis method behaviors adalah instance dari yii/base/behaviors, yang berfungsi untuk meningkatkan fungsi dari component tanpa menggangu/merubah class parent atau inheritancenya.
    Filter Merupakan object yang bekerja seperti BeforAction atau AfterAction pada beberapa framework lain. sederhananya sebelum atau sesudah action dari class, kasus ini class ruangKelas.php. VerbFilternya sendiri adalah objek yang methodnya membaca izin dari method Request HTTP Action, apakah diizinkan atau tidak jika tidak akan mengembalikan nilai HTTP 405 exception.
    Jadi fungsi dari method ini sederhananya seperti menambah kebiasaan dari class agar selalu mengecek method dari request actionya Apakah get, post, put dan lain-lain jika ditolah maka akanmengembalikannilai error.
    Untuk melihatnya masuk ke http://yii2campus.test/ruang-kelas kemudian buat sebuah record dari ruang kelas, submit, kemudian delete lagi. setelah itu coba ganti action verbnya menjadi :
    'verbs' => [
                    'class' => VerbFilter::className(),
                    'actions' => [
                        'delete' => ['get'],
                    ],
                ], 
    
    kemudian buat record kembali, submit, kemudian delete.
  • Method lainya bekerja sesuai nama actionya. da akankita bahas pada diskusi lainya.

View

Pada bagian view ini kita tidak akan membahas detail tentang View, karena kita sedikitnya sudah pernah berdiskus tentang view pada part 3. Selain untuk meghindari diskusi yang redundant, rasaya lebih nyaman membahas view ketika secara bersamaan ketika kita mencoba firtur fitur dari Yii2 lebih dalam lagi.

Kesimpulan

Pada diskusi kali ini kita hanya membahas sedikit tentang hasil code generate dari Gii, dan sedikit mengubah kode agar sesuai keperluan diskusi kita kedepanya. Bahasan selanjutnya kita akan mencoba ActiveRecord, dan beberapa fitur lain yang masih berhubungan.
Sedikit Catatan dari saya
Mohon Maaf jika dalam seri ini alurnya terasa lambat, karena saya harus meluangkan waktu dengan kegiatan rutin saya.
Terima Kasih Atas Pengertianya.

Sunday, July 28, 2019

Docker..., (beberapa) command-line (yang perlu kita ketahui)



Pada diskusi kemarin kita membahas konsep dari Docker, diskusi kali ini kita akan membahas perintah perintah dasar docker yang perlu kita ketahui.

Review

Kita telah membahas instalasi Docker, menjalankan container menggunakan docker run , mendownload image menggunakan docker pull dan beberapa perinth yang mendukungnya.
  • docker Version
    Digunakan untuk melihat versi docker yang kita pakai.
  • docker run [nama image]
    Untuk menjalankan image instance dari image di dalam container, Jika image ada damrespository locakmaka image dijalanakan jika tidak ada maka imageakan di download dulu dari respository public.
  • docker pull [nama image]
    untuk mendownload image kedalam respository local, tetapi image tidak akan dijalankan.
  • docker help
    Melihat Cheatsheet bawaan dari docker.
  • docker ps
    melihat container aktif yang ada, jika perintah ini ditambah dengan perintah all (docker ps -a), maka akan menampilkan container aktif danyang tidak aktif.
Pada dasarnya perintah docker akan seperti di bawah ini :
docker [OPTIONS] COMMAND [arg...]

Command-line lainya

Sebelum saya lupa, menurut dokumen docker, Docker Image adalah template yang aksesnya hanya Read-Only. Dan Merupakan kumpulan dari componen (misalkan, Os, Web Server, dan lainlain) yang merupakan pondasi dari Container
Setelah kita mereview beberapa command-line, kita akan melihat beberapa command-line lain, seperti :
  • Menjalankan Containe Secara interactive
    Pada diskusi sebelumnya kita pernah mencoba menjalankan containerdengan perintah run, kai ini kita akan menjalankan containerlagi tetapi dengan mode interactive dengan perintah --interactive --tty, short syntaxnya -i -t , jika dipedekan lagi menjadi -it. untuk keluar dari interactive mode menggunakan ctrl+p diikuti ctrl+q bisa juga dengan exit pada terminal
    misalnya : docker run -i -t ubuntu:18.04
  • Start, Stop, Restart
    fungsi dari start, stop, restart sesuai dengan namanya, perintahnya adalah
    docker [strart | stop |r estart] [Container name | Container ID] yang perlu dilakukan kita perlu melihat dulu container yang ada dengan docker ps atau docker d -a, jika ada container yang aktif kita bisa menonaktifkan dengan perintah docker stop namaContainer atau sebaliknya jika kita ingin mengatifkan container kitabisa menggunakan perintah
    docker start namaContainer. Perintah restart merupakan gabungan perintah stop an start.
  • Mencari Repository di Docke Hub
    Untuk mencari repository di docker hub docker search [Keyword], hasilnya akan menamplkan list dari repository yang berhubungan dengan keyword yang kita cari. Dan bisa digunakan untuk mengunduh repository sesuai namanya
    misalnya : docker search yii, docker search mysql
  • Perintah lainya
    Command line di docker sebenarnya sangat banyak dan kita bisa melihat melalui fungsi help dari docker. Yang ingin kita diskusikan di point ini adalah kita bisa mengabungkan beberapa perintah di docker, kita mengetahui perinta untuk melihat list semua Container ID dengan docker ps -a -q.
    untuk menonaktifkan semua kontainer yang aktif kita bisa menggunakan perintah:
    docker stop $(docker ps -q)
    jika kita inginmenghapus semua Container kita bisa menggunakan perintah di bawah ini :
    docker rm $(docker ps -aq)

Penutup

Pada seri ini kita tidak membahas Docker secara mendalam, hanya beberapa perintah sederhana saja. Hapan pada seri ini sederhana saja hanya membuka sedikit wawasan tentang Docker, sehingga jika kita ingin mempelajari tentang docker melalui tutorial tutorial yang banyak bertebaran kita mudah untuk mengikutinya, Karena pembahasan docker cukup luas. Mudah mudahan pada kesempatan lainya (Diluar seri ini) kita akan membahas topik tentang docker lagi. Terima Kasih, selamat bertualang di Dunia containerization platform.

Wednesday, July 24, 2019

Docker..., Terms that we need to understand (wow bhs inggris !!! gakjuga, tetep bhs Indonesia... )



Pada diskusi sebelumnya, kita telah membahas cara menggunakan Docker. Mulai dari instalasi, menggunakan perintah run dan pull, dan juga beberapa perintah lainya. Diskusi kali ini kita akan membahas beberapa hal seputar Docker.

Docker dari sudut pandang lain (BigPicture dari newbie)

Sebelum kita Docker lebih lainjut. Saya ingin membahas sedikit tentang Docker jika kita melihatnya dari sudut pandan yang lain.
Kadang kita bingung mendengar istilah istilah di dunia container (atau istilah kerenya Container Runtime Environments) ini , mungkin selain Docker ada juga container container yang mirip mirip, misalnya rkt, Mesos Containerizer, OpenVZ dan lain-lain. Balik lagi ke Docker, istilah docker misalnya image, container, registry dan lain lain yang akan membuat kita (terutama saya), menjadi bingung dan akhirnya malas untuk memcoba Docker dan lainya yang mirip.
Karena itu untuk lebih memahami istilah istilah Docker, dalam diskusi ini saya ingin membahas Docker jika kita melihat Docker dari sudut pandang OOP (Object Oriented Programing).
Pertama istilah yang umum adalah Docker registries. Dalam Docker, registry adalah tempat untuk menyimpan image, registry ini bisa berupa registry local atau registry public yang secara default adalah Docker Hub. Dalam pandangan saya, Jika kita masukan dalam dalam paradigma OOP, registry ini bekerja seperti Class, Jika dalam OOP adalah class yang menghasilan object, begitu juga registry yang akan menghasikan image yang disimpanya.
Kedua Image, produk (bisa berupa Os, WebAppdan lain lain) yang disimpan dalam registry. Image ini bisa berupa image lokal atau image public. Dalam sudut pandang OOP, image ini seperti Object. Sama seperti Object, jika object merupakan merupakan representasi dari kumpulan instance. Begitu pula image yang merupakan representasi dari sekumpulan container.
Ketiga, Container merupakan image yang sedang berjalan. Dalam pandangan OOP instance merupakan object yang berjalan dan mempunyai nilai yang pasti, begitu pula container. container merupakan image yang sedang berjalan dan mempunyai nilai yang pasti minimal Container ID (Dalam Docker).

Kesimpulan

Pada diskusi singkat kali ini, kita membahas Konsep dari Docker jika kita melihatnya dari sudut pandang yang lain yang kita lebih mengerti. Pada diskusi selanjutnya kita akan membahas perintah perintah Dasar yang berhubungan dengan Container.

Yuk Belajar Yii2 part 5





Berkenalan Dengan Gii

Hallo, maaf, beberapahari ini saya tidak sempat membuat lajutan dari seri ini, dikarenakan beberapa kesibukan. Ok kita langsung saja. Kali ini kita akan membahas Gii, modul ajaib yang sangat membatu kita.
Menurut Dokumen Yii, Gii adalah kode generator otomatis yang berguna untuk mengimplementasikan kode-kode yang secara umum digunakan dalam sebuah web site. biasanya kode-kode tersebut merupakan implementasi dari CRUD.
Sesuai judul, pada pembahasan kita kali ini, kita akan membahas beberapa topik yang berhubungan dengan Gii:
  • Membuat Databas beserta tabel-tabel yang diperlukan.
  • Menghubungkan Yii dengan Database.
  • Membuat Model, Controller dan View menggunakan Gii.

Membuat database

Pada bahasan sebelumnya kita sudah melihat class diagram ( Lebit tepatnya ERD karena saya dalam menggambarnya menggunakan MySqlWorkbench, selain itu jika penggambaran class diagram tanpa method-method dari class tersebut penggambaranya akan sangat serupa dengan ERD) dari aplikasi sederhana yang akan kita buat, beserta beberapa deskripsinya ( jika terlewat bisa melihat di link Yuk Belajar Yii Part 4 ). kali ini kita akan mengimplementasikan class diagram tersebut ke dalam database. untuk itu kita bisa membuat tabel sesuai file ini atau dengan sql dibawah ini :
CREATE TABLE `dosen` (

  `id` int(11) NOT NULL,
  `nama` varchar(45) NOT NULL,
  `tanggal_lahir` varchar(45) NOT NULL,
  `alamat_rumah` varchar(45) DEFAULT NULL,
  `foto` varchar(145) DEFAULT NULL,
  `user_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `jadwal` (
  `id` int(11) NOT NULL,
  `matakuliah_id` int(11) NOT NULL,
  `ruang_kelas_id` int(11) NOT NULL,
  `hari` smallint(6) DEFAULT NULL,
  `jam` time DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `jadwal_mahasiswa` (
  `id` int(11) NOT NULL,
  `jadwal_id` int(11) NOT NULL,
  `mahasiswa_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `mahasiswa` (
  `id` int(11) NOT NULL,
  `nama_mahasiwa` varchar(45) NOT NULL,
  `tanggal_lahir` date NOT NULL,
  `user_id` int(11) NOT NULL,
  `alamat_rumah` tinytext,
  `foto` varchar(145) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `matakuliah` (
  `id` int(11) NOT NULL,
  `dosen_id` int(11) NOT NULL,
  `nama_matakuliah` varchar(45) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `role` (
  `id` int(11) NOT NULL,
  `role_akses` varchar(45) NOT NULL,
  `nama` varchar(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `ruang_kelas` (
  `id` int(11) NOT NULL,
  `lantai` smallint(1) NOT NULL,
  `no_ruang` smallint(3) NOT NULL,
  `jenis_ruang` smallint(6) NOT NULL,
  `projector` smallint(6) NOT NULL,
  `pendingi_ruang` smallint(6) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `role_id` int(11) NOT NULL,
  `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `auth_key` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `access_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` date NOT NULL,
  `updated_at` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Jika malas untuk membuatnya bisa mengunduh File Mysql Workbench dan menjalankanya. untuk pembahasan cara mebuat database dan tabelnyatidak akan di bahas detai disini.

Koneksi Yii Dengan Database

Sebelum menggunakan Gii kita perlu menghubungkan aplikasi Yii dengan database, untuk itu kita bisa perlu memodifikasi file db.php yang terletak di dalam folder config. Contohnya seperti dibawah ini :
<?php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=tutorial',
    'username' => 'root',
    'password' => 'root',
    'charset' => 'utf8',

    // Schema cache options (for production environment)
    //'enableSchemaCache' => true,
    //'schemaCacheDuration' => 60,
    //'schemaCache' => 'cache',
];
Keterangan
  • class' => 'yii\db\Connection' memberitahukan file config bahwa kita menggunakan classs Connection.php terletak pada Vendor/yiisoft/yii2/db yang merupakan extend dari class componen.php yang artinya dbConnectin inimerupakan componen dalam Yii
  • 'dsn' => 'mysql:host=localhost;dbname=tutorial', memberitahukan bahwa kita menggunakan mysql di server localhost dengan nama database tutorial, nilai/isi dari variable ini tergantung seting masing masing.
  • 'username' => 'root', user name dari database kita.
  • 'password' => 'root', password dari database kita.
setelah semuanya selesai, cara paling mudah untuk mengecek koneksi aplikasi kita adalah langsung melalui Gii.
untuk memulai Gii caranya dengan mengarahkan browser ke halaman :
Jika belum mengatur Pretty URL bisa melihat pada part 03, Sebaiknya kita mengaturnya terlebih dahulu karena akan memudahkan kita ketika mencoba halaman yang kita buat.
Kita tidak membahas bagai mana cara seting Gii, karena secara default Gii sudah dapat berjalan pada Yii2. Tetapi jika ada masalah bisa langsung melihat panduan lengkapnya pada link dibawah ini : https://www.yiiframework.com/doc/guide/2.0/en/start-gii

Membuat Model, Controller dan View Menggunakan Gii.

Pertama kali membuka link dari Gii akan muncul halaman seperti di bawah ini,
5d31dbd5a059236487
selanjutnya yang pertama kita perlu buat adalah model, untuk itu kita klik start pada Model Generator. yang akan menampilkan halaman seperti ini,
5d31dd2942e4a13076
untuk memastikan apakah Yii terhubung dengan database bisa di coba dengan mengklik pada field Table Name. Jika dalam Dropdown muncul nama table kita maka artinya database telah terhubung.
Jika semuanya telah siap ( koneksi dengan database telah terhubung, tabel telah dibuat ), maka bisa langsung bisa melakukan proses code generator.

Model Generator

Model Generator adalah modul pertama dari Gii yang akan kita buka, karena class pertama yang kita harus buat adalah class model, karena modul CRUD Generator sangat bergantung pada model.
  • Role
    Model pertama yang akan kita buar adalah model Role, selain karena model ini sangat simple tetapi model ini juga tidak bergantung dengan model lain.
    Langkahnya adalah seperti :
    • Tabel Name : Role
    • Model Class Name : Role
    • Standardize Capitals : beri tanda Cek
    • yang lainya abaikan saja, sesuai dengan aturan standar
    Contohnya akan seperti gambar, di bawah ini :
    5d37116997c1115655
    Setelah semuanya sesuai kita bisa mengklik tombol Preview, untuk melihat code hasil dari Model Generatr seperti di bawah, kita bisa mengklik model/Role.php di dalam box Code File :
    5d3712dd0ff3296071
    Jika semua sudah ok kita bisa mengklik tombol Generat untuk menulis Kode ke dalam file.
  • User
    Karena model User.php adalah model bawaan dari Yii2dan sudah ada di dalam folder model, Sebaiknya kita tidak meng-overide model tersebut.
    Tetapi karena akan ada sedikit perubahan dari model aslinya, maka kita akanmelakukan penyesuaian pada model secara manual. Masalah ini akan kita bahas pada bagian lain dari diskusi kita.
  • Dosen
    Pada Diskusi sebelumnya kita Sudah membuat model Dosen.php, tetapi kali ini kita tetap akan membuat model Dosen.php lagi dengan Gii. Perbedaanya dengan saat membuat model Role.php hanya pada bagian box Code File, jika pada model Role.php akan ada kotak ceklis dengan option Create untuk model dosen option dari kotak cek listnya akan berupa overide.
    Untuk membuat model Dosen.php dari Tabel Dosen sama saja dengan cara membuat model Role.php dari tabel Role, dan begitu juga dengan model lainya akan sama.
Setelah membahas langkah lankah membuat model Role dan Dosen, dengan meggunakan Gii kita tidak akan membahas cara membuat model lainya. Tetapi untuk tetap dapat mengikuti diskusi ini diharapkan kita sudah membuat sebuat class dari model yang ada pada diagram dari diskusi kita pada part 4.

Contoller dan View Menggunakan CRUD Generator

Setelah sebelumnya kita membuat model dengan Model Generator, maka sekaran kita akan membuat Controller beserta viewnya, untuk keperluan ini kita dapat menggunakan CRUD Genetator.
Mengunakan CRUD Generatorakan sedikit berbeda dari saatkita menggunakan Model Generator. Pada CRUD Generator kita perlu mengetahui namespace dari model yang ingin kita Generate Controllernya.
Namesace umumnya sesuai dengan nama folder, jika kita punya model Dosen.php di dalam folder models, maka namespacenya akan menjadi app\models. Jika kita perlu model Dosen dalam Controllers maka kita akan memanggil dengan use app\models\Dosen.
  • RoleController dan ViewnyaSeperti sebelumnya yang pertama akan kita buat adalah Role, langkahnya adalah sebagai berikut :
    • Model Class : app\models\Role
    • Search Model Class :
    • Controller Class : app\controllers\RoleController
    • View Path :
    Untuk Search Model Class dan View Path kita kosongkan saja, jika kosong artinya kita mengikuti Default dari Gii. Setelah kita mengisi field field yang diperlukan, selanjutnya kita tinggal mengklik tombol preview kemudian jika udah sesuai kita tinggal menglik tombol Generate.5d380df90bbee87088
  • UserController Dan Viewnya
    Jika dalam proses Model Generator tadi kita tidak membuat model User.php tetapi untuk UserController dan viewnya belum disediakan secara default oleh Yii. Jadi kitateta pelu membuatnya. langkahnya sama dengan point sebelumnya.
  • Controller Lainya
    Seperti sebelumnya Controller lainya tetap kita buat, meskipun langkahnya tidak kita bahas disini.

Kesimpulan

Pada Diskusi kali ini, kita banyak membahas membuat model, controller dan view menggunakan fasilitas dari Yii yang bernama Gii. Fasilitas ini sangat membantu kita dalam membuat code program, tetapi code program yang dibuat oleh Gii mungkin masih belum memenuhi kebutuhan yang diperlukan oleh kita. Meskipun mungkin kirang sempurna tetapi Gii memberikan kita kerangka dasar dari program yang akan kita bangun.
Dalam Diskusi selanjutnya kita akan membahas tuning atau update kode program yang telah kita create menggunakan Gii. Hingga hasilnya sesuai dengan keperluan kita.

Tuesday, July 23, 2019

Docker !!! , Docker..., Docker.... Ah Bikin Pusing Aja



Docker !!! , Docker..., Docker.... Ah Bikin Pusing Aja

Kenapa Docker ??

Pertama tau docker, komen saya ah apaan sih ? rasanya koq cuma bikin ribet aja, paling juga strategi marketing atau apalah yang mikirnya negatif. Tapi Karena sering kebaca di readme.md akhirnya jadi penasaran juga. Nyesel juga sih, kenapa dulu gak langsung coba. Udah dulu curhatnya, ok sekaran lebih baik kita langsung aja bahas Dockernya aja.
Docker jika menggunakan bahasa simpelnya adalah sebuah produk yang bekerja sebagai kontainer yang dapat menyimpan unit perangkat lunak( aplikasi kita) beserta kode dan semua dipendesinya, sehingga kita bisa dengan mudah memindahkan aplikasi dari satu komputer ke komputer lain tanpa perlu menginstall atau menyeting ulang semua perangkat lunak pendukung aplikasi kita. Analoginya sama seperti kontainer biasa yang dapat diisi apa saja yang kita perlukan, hingga jika pindahkan dari satu ruang ke ruang lain akan mudah membawanya, .
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.

Instalasi Docker

Docker bisa diinstal di Os apa saja dari mula MacOs, Linux, Windows dan lain lain. Kali ini Kita akan mencoba membahas cara penginstalan docker di windows khususnya windows 10, untuk di windows lainya syarat utama yang diperlukan untuk menginstal Docker di sistem operasi windows adalah fitur windows Hyper-V harus aktif, karena Docker akan berjalan di dalam virtual machine.
Jika Hyper-V sudah terpasang maka untuk menginstal Docker, kan sangat mudah :
  • Pertama unduh terlebih dahulu Docker Desktop di link ini https://www.docker.com/products/docker-desktop.
  • Setelah itu kita dapat menginstall docker seperti kita menginstal aplikasi window biasa.
  • Untuk membuka Docker kita juga hanya perlu mengklik shorcut docker dari start menu, kita pelu menuggu beberapa saat hingga Docker Destop terbuka.
  • Langkah selanjutnya, meskipun dapat di lewati, lebih baik kita mendaftar dahulu di Docker Hub.
  • Setelah semua langkah di atas di lakukan kita bisa menjalankan Docker melalui Command Promp windows atau WindowsPowerShell. catatan : Contoh Contoh di pembahasan kita akan menggunakan PowerShell.
Link lengkap untuk instalasi docker di

Memulai Docker

Seperti memulai mempelajari bahasa pemrograman baru, cara termudahnya untuk mencoba adalah dengan mumbuat hello-world, Docker juga seperti itu pada awalnya kita akan mencoba menjalahkan perintah Docker dengan Hello World.
Pertama kita buka dahulu PowerShell, untuk memastikan apakah instaladi Docker kita bejalan pertama kita bisa menggunakan perintah :
docker Version
Jika berjalan maka akan keluar tampilan seperti berikut :
5d3676632d36e94222
Selanjutnya kita bisa langsung mencoba perintah hello world kita dengan perintah :
docker run hello-world
Selanjutnya akan tampil seperti
5d3678a84f22149550
ketika mengeksekusi perintah docker run hello-world adabeberapa hal yang bisa kita garis bawahi :
  • perintah docker run adalah perintah untuk membuat/memulai sebuah container.
  • hello-world sendiri adalah perintah untuk menjalankan image hello-world dalam container.
  • karena pada saat ini kita tidak mempunyai image hello-world di dalam docker, maka yang pertama yang tampil adalah pemberitahuan unable to find image, dikarenakan kita belum mempunyai image hello-world, maka docker akan mencari respositorynya di docker hub. Jika ditemukan akan langsung di downloadkan buat kita.
  • Jika download repository selesai maka kan menampilkan hello from Docker!, yang merupakan repository official dari docker.

Bantuan Dari Docker

Ketika menggunakan Docker kita akan banyak menggunakan perintah Command-Line untuk menjalankan perintah atau fungsi dari Docker. Oleh karena itu akan lebih baik jika kita bisa menggunakan bantuan yang telah disediakan Docker.
Perintah bantuan (help) dari docker dapat diakses dengan menggunakan perintah docker help, yang akan menampilkan list dari top level syntax yang bisa kita gunakan untuk berinteraksi denggan Docker, misalnya run, build, commit dan lain lain.
Untuk mendapat detail perintah dari perintah Top Level ini kita bisa menanambah perintah dari Docker help dengan docker help [perintah], misalnya docker help run, docker help commitdan lain lain.

Menjalankan Container

Pada awal pembahasan ini kita telah membahas tentang menjalanka Docker dengan perintah run untuk menjalankan hello-world. Sekarang kit akan mencoba menjalankan Ubuntu dalam container. Pertama kita akan menjalankan perintah docker pull ubuntu:14.04, peritah pull ini digunakan untuk menarik repositori ubuntu dari Docker Hub dan menyimpanya dalam image lokal. kemudian kita akan coba menjalankan perintah docker images dan perintah docker ps dan docker ps -a, mari kita lihat perbedaan anatara ketiga perintah tersebut.
  • pada perintah images akan kita melihat file image lokal yang ada di mesin kita. disini kita temukan file ubuntu yag telah kita tarik/pull dari docker hub
  • pada perintah ps kita kita tidak melihat ubuntu karena perintah ini adalah untuk melihat container yang aktif saja.
  • selanjutnya pada perintah ps -a, juga kita tidak melihat ubuntu, tetapi kita melihat kontainer lain yang pernah kita buat. ( -a artinya all ). kita tidak melihat ubuntu karena kita belum membuat instance dari ubuntu.
Disini kita dapat melihat perbedaan antara run dengan pull. dimana perintah pull hanya akan mendownload imagenya saja sedangkan perintah run adalah untuk menjalankan container (sekaligus membuat instance dari image).
Perintah run, akan menjalankan container, dengan melakukan pengecekan terlebih dahulu apakah ada image lokal dari container yang akan kita create, jika image tidak ada di mesin lokal maka docker akan mendownload image dari docker hub. Setelah prosen pengecekan atau download selesain maka proses akan menbuat instance dari image.

Kesimpulan

Awalnya saya hanya ingin membahas sedikit tentang Docker, tetapi topik pembahasan tentang docker ini cukup banyak sehingga tidak bisa dibahas seluruhnya dalam satu kali pembahasan. Selanjutnya kita akan membahas topik topik lain pada pembahasan kita selanjutnya.
Dalam pembahasan kali ini, kita telah mempelajari bagaimana cara menginstall docker, menggunakan fasilitas help, mengunduh dan menjalankan image dari docker hub.
Pada pembahasan selanjutnya kita akan lebih detail tentang Container serta pembahasan yang berhubungan dengannya.

Wednesday, July 17, 2019

Yuk Belajar Yii2 part 4


Model

Model dalam mvc adalah bagian yang berhubungan dengan data, jadi model adalah class yang langsung berhubungan dengan data, dari mulai pencariaan data, validasi, penyimpanan data dan lain lain.
Dari dokumen resmi Yii2
Models are part of the MVC architecture. They are objects representing business data, rules and logic.
You can create model classes by extending yii\base\Model or its child classes. The base class yii\base\Model supports many useful features:
  • Attributes: represent the business data and can be accessed like normal object properties or array elements;
  • Attribute labels: specify the display labels for attributes;
  • Massive assignment: supports populating multiple attributes in a single step;
  • Validation rules: ensures input data based on the declared validation rules;
  • Data Exporting: allows model data to be exported in terms of arrays with customizable formats.
The Model class is also the base class for more advanced models, such as Active Record. Please refer to the relevant documentation for more details about these advanced models.
Dalam Yii class model yang kita buat adalah class yang merupakan inheritance dari yii\base\model dalam implementasinya biasa ditulis dengan :
class NamaClass extends model {} 
Untuk membahas model, sekaligus agar kita konsisten dengan contoh sebelumnya. Juga agar kita konsisten dengan latihan latihan kita ke depanya, kita akan membahasnya melalui contoh kasus.
Contoh kasus yang kan kita gunakan adalah sistem perkuliahan sederhana, seperti dalam diagram class di bawah ini :
5d37d81d7a84512404
Asusmsi Awal:
  • Agar lebih mempermudah kita dan tetap terfokus pada Yii2, latihan kita tidak membahas Jurusan, Angkatan, kelas dan lain lain.
  • User model adalah model yang berhubungan dengan identity Class
  • Dosen Dan Mahasiswa adalah detail dari User model.
  • Dosen boleh mengajar banyak Matakuliah, Tetapi satu Matakuliah hanya boleh di pegang satu dosen.
  • Mahasiswa boleh mempunyai banyak Jadwal, dan satu Jadwal boleh diisi oleh banyak Mahasiswa. jadi kita akan memakai model JadwalMahasiswa untuk menghubungkan model Mahasiswa dengan Jadwal.
  • Satu Matakuliah bisa mempunyai banyak Jadwal, satu Jadwal hanya diisi satu Matakuliah.
  • Satu Jadwal hanya boleh mengisi satu RuangKelas, satu RuangKelas bisa diisi banyak Jadwal
Jika pada latihanlatihan kita sebelumnya kita memakai project yii2basic maka untuk lathan ini kita akan membuat project baru, disini kita akan menamakan yii2campus. untuk instalasi dan lainya silahkan liat referensi dari https://www.yiiframework.com/doc/guide/2.0/en

Membuat Model Pertama

Pada contoh ini kita akan membuat model Dosen (Agar lebih konsisten dengan cotoh kita sebelumnya) model bekerja memvalidasi input dari pengguna.
Pertama kita perlu membuat model file dengan nama Dosen.php dalam folder models, kemudian masukan kode di bawah ini :
jika dalam kode ada coment block seperti /* on / atau / * off */ abaikan saja karena itu fungsi custom Eclipse IDE untuk menghiraukan auto format.
<?php
namespace app\models;

use Yii;

class Dosen extends \yii\db\ActiveRecord
{

    /* off */
    /* property dari model dosen */
    public $id;
    public $nama;
    public $tanggal_lahir;
    public $alamat_rumah;
    public $foto;
    public $file_foto;
    public $user_id;
/* on */

    /**
     * methode ini tidak diperlukan dalam coding,
     * tetapi berguna untul menampilkan label ke pengguna akhir
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'nama' => 'Nama',
            'tanggal_lahir' => 'Tanggal Lahir',
            'alamat_rumah' => 'Alamat Rumah',
            'foto' => 'Foto',
            'user_id' => 'User ID'
        ];
    }

    /**
     * aturan validasi model Dosen
     */
    public function rules()
    {
        return [
            /* off */
            [ [  'id','nama', 'tanggal_lahir' ],
                'required'
            ],
            [ [ 'id', 'user_id' ],
                'integer'
            ],
            [ [ 'nama', 'tanggal_lahir', 'alamat_rumah' ],
                'string',
                'max' => 45
            ],
            [ [ 'foto' ],
                'string', 
                'max' => 145
            ],
            [ [ 'id' ],
                'unique'
            ],
        ];
        /* on */
    }
}
Keterangan :
  • namespace digunakan untuk mengatur nama menjadi deklaratif dalam mengatur file menjadi group logis untuk mencegah kekacauan file karena nama yang sama antara file. simpelnya name space seperti nama folder tempat file disimpan.
  • use digunakan untuk mendeklarasikan class objek lain yang digunakan dalam class kita.
  • class Dosen extends \yii\db\ActiveRecord adalah tag pembuka dari class yang kita bangun. classmendeklarasikan class, Dosen adalah nama atu ID dari class tersebut, extend menyatakan kelas ini merupakan inheritance dari class ActiveRecord. kemudian \yii\db\ActiveRecord bentuk lain dari deklarasi use, jika kita deklarasikan use \yii\db\ActiveRecord maka deklaras class bisa di buat seperti class Dosen extends ActiveRecord karena kita sudah memberitahukan class bahwa kita menggunakan Active pada deklarasi use.
  • public function attributeLabels() merupakan method yang kita implementasikan dari method pada kelas Model.php, kita bisa meng override method tersebut karena ActiveRecord.php merupakan inheritance dari Model.php.
    function attrbuteLabels () sendiri berduna untuk merubah nama property (mudahnya variabel) dari class kita menjad nama yang lebih mudah dibaca end user. misalnya user_name menjadi Nama Pengguna atau id menjadi Nomor Induk Dosen, dan lain lain.
  • public function rules() sama seperti public function attributeLabels() merupakan method yang kita implementasikan dari class Model.php.
    function rules() berfungsi untuk menmvalidasi data yang di input user sesuai dengan aturan yang kia tetapkan. misalnya
    [ [ 'id','nama', 'tanggal_lahir' ], 'required' ] artinya field Id, nama, dan tanggl_lahir tidak boleh kosong. contoh lainya [ [ 'id', 'user_id' ], 'integer' ] field id dan user_id harus bertipe integer. referensi lengkap validator dapat dilihat di https://www.yiiframework.com/doc/guide/2.0/en/tutorial-core-validators
Setelah model di bangun kini saatnya kita membuat controller, seperti biasa kita membuat controler lainya, pertama kita membuat file DosenController.php dalam folder controllers, kemudian masukan kode :
<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;
/* model yang dipakai  */
use app\models\Dosen;


/**
 * DosenController implements the CRUD actions for Dosen model.
 */
class DosenController extends Controller
{
    public function actionCreate()
    {
        $model = new Dosen();
        $modelCanSave = false;

        if ($model->load(Yii::$app->request->post()) && 
        $model->validate()) {
            $modelCanSave = true;
        }

        return $this->render('create', [
            'model' => $model,
            'modelCanSave' => $modelCanSave
        ]);
    }
}
  • Tidak ada perbedaan dengan controller sebelumnya yang pernah kita buat hanya saja dalam deklarasi use ada deklarasi use app/models/Dosen yang berguna untuk menyatakan bahwa kita menggunakan model Dosen.php dalam class ini.
  • model->load, model->validate berfungsi untuk memangil mehod dari class model dengan method sesuai nama fungsinya.
  • Yii::$app->request->post(), Yi::app secara sederhana merupakan entry script point yang dapat di akses secara global. request->post sendiri memanggil method post dari class request. methodnya sendiri berhubungan dengan request parameter
  • return $this->render() memanggil fungsi render.
  • $model = new Dosen(); membuat instance dari Dosen dengan nama model.
  • $modelCanSave variable yang diinisilisasi dengan false.
selanjutnya kita membuat folder baru dalam view/dosen kemudian diisi dengan kode di bawah ini :
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\Url;
use yii\helpers\ArrayHelper;
?>

<?php if($modelCanSave) { ?>
<div class="alert alert-success">model siap disimpan!</div>
<?php } ?>

<?php $form = ActiveForm::begin(); ?>
<div class="row">
    <div class="col-lg-12">
        <h1>Room form</h1>
              <?= $form->field($model, 'id')->textInput() ?>
            <?= $form->field($model, 'nama')->textInput(['maxlength' => true]) ?>
            <?= $form->field($model, 'tanggal_lahir')->textInput(['maxlength' => true]) ?>
            <?= $form->field($model, 'alamat_rumah')->textInput(['maxlength' => true]) ?>
            <?= $form->field($model, 'foto')->textInput(['maxlength' => true]) ?>    
   </div>
</div>

<div class="form-group">
    <?= Html::submitButton('Create' , ['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
Setelah semua beres di input, kita bisa mencoba untuk menjalankan di browser dengan URL http://yii2campus.test/dosen/create, kita bisa mencoba dengan input yang tidak sesuai dengan validasi. form field akan berubah menjadi merah tanda validasi gagal. jika semuanya berhasil view akan menampilkan pemberitahuan model siap disimpan.
Jika Kita merubah kode dibawah :
<div class="alert alert-success">model siap disimpan !</div>
Dengan ini :
<div class="alert alert-success">
    Id Dosen : <?php echo $model->id; ?> <br />
    Nama: <?php echo $model->nama; ?> <br />  
    Tanggal Lahir: <?php echo Yii::$app->formatter->asDate($model->tanggal_lahir,'php:m/d/Y'); ?> <br />
    Alamat: <?php echo $model->alamat_rumah; ?> <br />  
      Foto : <?php echo $model->foto; ?> <br />
</div>
Hasilnya akan menampilkan informasi yang kita telah kita masukan.

Kesimpulan

Pada part ini kita telah mempelajari tentang model, meskipun tidak menghubungkan model tersebut dengan database, tetapi kita telah melihat bahwa model buka hanya berhubungan dengan penyimpanan dan pencarian data. Di sini model kita gunakan untuk memvalidasi input pada form. Kita juga telah membuat Controller yang mengatur flow antara model dengan view.
pada part selanjutnya kita akan membahas gii, sebuah fitur ajaib yang disediakan oleh Yii.