author Ahmad Muhardian

Pertemuan kedua praktikum bebas, memahami MVC Yii


Melanjutkan praktikum sebelumnya, pada pertemuan kedua ini kita akan belajar MVC (Model, View, Controller) Yii. Memahami MVC dengan praktik langsung.

Modifikasi controller Jurusan

Mari kita buka berkas JurusanController.php, yang berada di direktori backend/controllers/. Isi dari berkas tersebut berupa kelas bernama JurusanController, kelas ini turunan dari kelas Controller.

<?php

namespace backend\controllers;

use Yii;
use backend\models\Jurusan;
use yii\data\ActiveDataProvider;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;

/**
* JurusanController implements the CRUD actions for Jurusan model.
*/
class JurusanController extends Controller
{
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['post'],
],
],
];
}

/**
* Lists all Jurusan models.
* @return mixed
*/
public function actionIndex()
{
$dataProvider = new ActiveDataProvider([
'query' => Jurusan::find(),
]);

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

/**
* Displays a single Jurusan model.
* @param integer $id
* @return mixed
*/
public function actionView($id)
{
return $this->render('view', [
'model' => $this->findModel($id),
]);
}

/**
* Creates a new Jurusan model.
* If creation is successful, the browser will be redirected to the 'view' page.
* @return mixed
*/
public function actionCreate()
{
$model = new Jurusan();

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

/**
* Updates an existing Jurusan model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id
* @return mixed
*/
public function actionUpdate($id)
{
$model = $this->findModel($id);

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

/**
* Deletes an existing Jurusan model.
* If deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id
* @return mixed
*/
public function actionDelete($id)
{
$this->findModel($id)->delete();

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

/**
* Finds the Jurusan model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* @param integer $id
* @return Jurusan the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findModel($id)
{
if (($model = Jurusan::findOne($id)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
}

Namespace menandakan lokasi JurusanController.php disimpan. Kata kunci use, artinya kita akan menggunakan kelas-kelas lain di dalam berkas ini. use mirip seperti import pada bahasa pemrograman java atau python.

<?php

namespace backend\controllers;

use Yii;
use backend\models\Jurusan;
use yii\data\ActiveDataProvider;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;

Di dalam kelas JurusanController terdapat fungsi-fungsi (aksi) untuk mengendalikan data. Sebelum ditampilkan ke views, data perlu diproses; di kelas inilah kita menuliskan kode logika pengolahan data.

class JurusanController extends Controller
{
...
...
...
}

Contoh, lihatlah fungsi yang bernama actionIndex(). Perhatikan logika program yang ada di dalamnya. Fungsi ini untuk menampilkan data di index.php

class JurusanController extends Controller
{
// ...

public function actionIndex()
{
// mengambil data di database (model)
$dataProvider = new ActiveDataProvider([
'query' => Jurusan::find(),
]);

// mengirim data ke views index.php
return $this->render('index', [
'dataProvider' => $dataProvider,
]);
}

// ...
}

Sekarang, mari kita membuat aksi sendiri. Aksi ini hanya untuk menampilkan pesan "Hallo Dunia" saja. actionUcapsalam(), itulah nama aksi yang akan kita buat. Penulisannya di dalam kelas JurusanController.

class JurusanController extends Controller
{
// ...

public function actionUcapsalam()
{
$ucapan = "Hallo Dunia";

echo $ucapan;
}

}

Kode lengkap JurusanController.php yang sudah ditambahkan dengan aksi actionUcapsalam() dapat di lihat di http://pastebin.com/dNbEfVCG. Untuk melihat aksi yang telah dibuat, silahkan buka URL ini http://localhost/pmb/backend/web/index.php?r=jurusan/ucapsalam.

Menuliskan echo di berkas controller sangat tidak dianjurkan. Karena akan membuat kode programnnya menjadi kurang rapi. Berkas controller khusus untuk menulis kode logika saja, bukan untuk menampilkan data. Kita dapat menggunakan echo di berkas views. Sekarang, mari kita modif lagi aksi yang sudah dibuat; ganti perintah echo menjadi return

class JurusanController extends Controller
{
// ...

public function actionUcapsalam()
{
$ucapan = "Hallo Dunia";

return $this->render('salam',[
'ucapanSalam' => $ucapan
]);
}

}

Kode lengkap dapat dilihat di pastebin: http://pastebin.com/dhE19xg9

Selanjutnya, mari kita membuat berkas baru di direktori backend/views/jurusan dengan nama salam.php. Berkas inilah tempat menampilkan data. Di bawah ini isi berkas salam.php.

<?php

echo $ucapanSalam;

Di aksi actionUcapsalam(), kita sudah menggunakan perintah return untuk me-render atau mengirim data yang ada di variabel $ucapan ke berkas salam.php. Data yang dikirim tersimpan di variabel $ucapanSalam. Oleh karena itu, kita akan mencetak isi variabel tersebut di berkas salam.php.

Setelah itu coba lihat lagi tampilan aksi yang sudah dibuat. Masuk ke http://localhost/pmb/backend/web/index.php?r=jurusan/ucapsalam

Cobalah mengirim lebih dari satu variabel, modifikasi lagi aksi actionUcapsalam() menjadi seperti ini:

public function actionUcapsalam()
{
$ucapan = "Assalamualaikum, Saya sedang belajar framework Yii";
$nama = "Ardianta";

return $this->render('salam',[
'ucapanSalam' => $ucapan,
'seseorang' => $nama
]);
}

Ubah juga berkas salam.php menjadi seperti ini:

<?php

echo $seseorang ." Mengatakan: <q>". $ucapanSalam ."</q>";

Modifikasi views jurusan

Buka berkas index.php yang ada di direktori backend/views/jurusan/. Isi dari berkas tersebut adalah ini:

<?php

use yii\helpers\Html;
use yii\grid\GridView;

/* @var $this yii\web\View */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Jurusans';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="jurusan-index">

    <h1><?= Html::encode($this->title) ?></h1>

    <p>
        <?= Html::a('Create Jurusan', ['create'], ['class' => 'btn btn-success']) ?>
    </p>

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'kode_jurusan',
            'nama_jurusan',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

</div>

Modifikasilah kode di atas seperti tangkapan layar dibawah ini.

Lihatlah, perbedaannya setelah dimodifikasi.

Membuat pagination

Pagination berfungsi untuk membatasi jumlah baris yang ditampilkan di tabel. Mari kita modifikasi berkas JurusanController.php, di bagian aksi actionIndex(), tambahkan 'pagination' => ['pageSize' => 2,]. 2 adalah jumlah baris yang akan ditampilkan.

Coba buka halaman jurusan, maka akan tampil dua baris, dan dibawahnya terdapat pagination.

Membuat tabel pendaftar

Seperti rencana, proyek ini akan memiliki bebarapa tabel. Kita sudah membuat tabel jurusan. Sekarang membuat tabel pendaftar, berikut ini kalimat SQL untuk membuat tabel pendaftar.

CREATE TABLE pendaftar(
nomer int(11) NOT NULL,
nama varchar(40) NOT NULL,
jk enum('L','P') NOT NULL,
agama enum('Islam','Hindu','Budha','Kristen','Konghucu') NOT NULL,
nilai_ijazah varchar(45) NOT NULL,
asal_sekolah varchar(32) NOT NULL,
alamat_sekolah varchar(45) NOT NULL,
PRIMARY KEY(nomer)
)

Membuat model pendaftar secara manual

Di praktikum sebemulnya, kita membuat model dengan me-genrate melalui fitur Yii. Sekarang kita akan coba menulis kode model secara manual. Mari membuat berkas bernama Pendaftar.php di direktori backend/models.

Isilah berkas tersebut dengan kelas bernama Pendaftar.

<?php

namespace backend\models;

class Pendaftar extends \yii\db\ActiveRecord
{

// ...

}

Membuat nama tabel, tambahkan fungsi ini di dalam kelas Pendaftar. Nama tabel sesuai dengan nama tabel yang dibuat di database.

public static function tableName()
{
return 'pendaftar';
}

Membuat rules atau aturan. Aturan ini berfungsi untuk menangani input/update di form

public function rules()
{
return [
// #1 Data harus terisi semua
[['nomer', 'nama', 'jk', 'agama', 'nilai_ijazah', 'asal_sekolah', 'alamat_sekolah'], 'required'],

// #2 nomer pedaftaran harus berupa angka
[['nomer'], 'integer'],

// #3 Selain nomer, datanya berupa string
[['nama', 'jk', 'agama', 'nilai_ijazah', 'asal_sekolah', 'alamat_sekolah'], 'string']
];
}

Membuat label atribut.

public function attributeLabels()
{
return [
'nomer' => 'Nomer Pendaftaran',
'nama' => 'Nama',
'jk' => 'Jenis Kelamin',
'nilai_ijazah' => 'Nilai Ijazah',
'asal_sekolah' => 'Sekolah Asal',
'alamat_sekolah' => 'Alamat Sekolah'
];
}

Isi lengkap: Pendaftar.php

<?php

namespace backend\models;

class Pendaftar extends \yii\db\ActiveRecord
{

// membuat nama tabel
public static function tableName()
{
return 'pendaftar';
}


// membuat aturan
public function rules()
{
return [
// #1 Data harus terisi semua
[['nomer', 'nama', 'jk', 'agama', 'nilai_ijazah', 'asal_sekolah', 'alamat_sekolah'], 'required'],

// #2 nomer pedaftaran harus berupa angka
[['nomer'], 'integer'],

// #3 Selain nomer, datanya berupa string
[['nama', 'jk', 'agama', 'nilai_ijazah', 'asal_sekolah', 'alamat_sekolah'], 'string']
];
}


// membuat label atribut
public function attributeLabels()
{
return [
'nomer' => 'Nomer Pendaftaran',
'nama' => 'Nama',
'jk' => 'Jenis Kelamin',
'nilai_ijazah' => 'Nilai Ijazah',
'asal_sekolah' => 'Sekolah Asal',
'alamat_sekolah' => 'Alamat Sekolah'
];
}

}

Membuat CRUT pendaftar

Pembuatan CRUT dilalkukan melalui fitur ajaib Yii. Buka http://localhost/pmb/backend/web/index.php?r=gii/default/view&id=crud. Kemudian isi datanya seperti ini

Guling ke bawah, klik tombol Preview; kemudian klik tombol Generate. Bila berhasil, akan keluar pesan seperti ini:

Generating code using template "/var/www/html/pmb/vendor/yiisoft/yii2-gii/generators/crud/default"...
generated controllers/PendaftarController.php
generated views/pendaftar/_form.php
generated views/pendaftar/create.php
generated views/pendaftar/index.php
generated views/pendaftar/update.php
generated views/pendaftar/view.php
done!

Uji coba CRUT pendaftar, kunjungi halaman pendaftar http://localhost/pmb/backend/web/index.php?r=pendaftar.

----- Bersambung -----

Tulisan ini sebagai catatan praktikum bebas yang saya ikuti. Pembahasannya tidak terlalu mendalam, hanya sebagai pengingat; kalau kelak saya lupa. Mudah-mudahan tulisan ini bermanfaat.

Baca Juga ini

Pertemuan pertama praktikum bebas, belajar framework Yii

Pertemuan pertama praktikum bebas, belajar framework Yii

Pagi tadi, pertemuan pertama praktikum bebas dimulai. Praktikum ini diadakan oleh STMIK Bumigora Mataram secara cuma-cuma. Praktikum ini bertujuan untuk mengembangkan keterampilan mahasiswa dalam memrogram. Pada praktikum ini, kita mempelajari framework yii. Persiapan senjata praktikumSebelum memulai praktikum, pastikan sudah memasang apache, php, dan mysql versi terbaru yang mendukung framework Yii. Di praktikum ini saya menggunakan Linux (Xubuntu). Sedikit informasi server web lokal yang sedang berjalan di laptop saya.

Belajar HTML #07: Cara Membuat Link untuk Menghubungkan Halaman Web

Belajar HTML #07: Cara Membuat Link untuk Menghubungkan Halaman Web

Panduan lengkap cara membuat link di HTML. Pada tutorial ini, kita akan belajar membuat link menggunakan tag a dan mengenal atribut-atribut yang biasanya digunakan untuk membuat link.

Manfaat fungsi max() di pemrograman python

Manfaat fungsi max() di pemrograman python

Pernahkan anda bertemu dengan kasus perbandingan suatu nilai yang terbesar? Bila menyelesaikan menggunakan if dan datanya banyak, tentu akan terasa sangat merepotkan. Karena banyak nilai yang akan dibandingkan. Fungsi max() adalah fungsi bulid-in untuk mencari nilai tertinggi. Fungsi ini dapat diberikan sebuah parameter berupa angka. Artikel ini sebenarnya dibuat untuk menjawab sebuah pertanyaan di grup Python Indonesia. Saya pemilik pabrik sepatu, saya menugaskan staff saya untuk menginput jumlah penjualan bulan Januari, Februari, dan Maret 2014.

Belajar Pemrograman Pascal di Linux, Apakah Bisa?

Belajar Pemrograman Pascal di Linux, Apakah Bisa?

Belajar pemrograman Pascal biasanya dilakukan dengan Turbo Pascal. Turbo Pascal adalah program yang digunakan untuk membuat program Pascal. Tapi… Turbo Pascal hanya tersedia untuk sistem operasi Windows saja. Lalu, bagaimana caranya kita belajar Pascal di Linux sedangkan Turbo Pascal tidak tersedia di sana. Ada tiga cara: Menggunakan WINE (Windows Emulator) untuk menjalankan Turbo Pascal di Linux; Menggunakan Free Pascal Compiler (FPC) Menggunakan GNU Pascal Cara pertama saya rekomendasikan jika kamu memang terpaksa harus menggunakan Turbo Pascal—misalnya kampus mewajibkannya—tapi Turbo Pascal sudah jadul dan sudah tergantikan dengan Free Pascal yang lebih modern.

Belajar Java #02: Persiapan Pemrograman Java di Linux

Belajar Java #02: Persiapan Pemrograman Java di Linux

Sebenarnya, kita hanya butuh dua alat untuk bisa memulai pemrograman Java di Linux. Apa saja itu? JDK Netbeans Apa itu JDK? Apa itu Netbeans? Bagaimana menginstalnya di Linux? Mari kita bahas.. googletag.cmd.push(function () { googletag.display('div-gpt-ad-multibanner1'); }); Apa itu JDK?JDK merupakan singkatan dari Java Development Kit. JDK menyediakan compiler, library, API, dan tools lainnya. Jika kamu baru pertama kali mendengar istilah-istilah ini, jangan khawatir.