DEV Community

Cover image for Yuk Belajar Yii2 part 4
Farid Aditya
Farid Aditya

Posted on • Updated on • Originally published at ngopidipokat.blogspot.com

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.

Top comments (2)

Collapse
 
caesarinadia profile image
Nadia Caesarina

trus gimana cara untuk save ke database?

Collapse
 
farid_aditya profile image
Farid Aditya

nanti di part 5