Tutorial Membuat CRUD Yii Tanpa Menggunakan Gii

Posted in Yii, Sunday, February 9th, 2014, by Muhammad Fahmi Al Azhar

Membuat fungsi crud (create, read, update, dan delete) bisa dengan mudah dilakukan dengan menggunakan fungsi generate yang ada di Yii. Tetapi, bagi beberapa programmer yang masih baru belajar dalam framework yii, kadangkala merasa bingung ketika menggunakan fungsi generate gii tersebut.

Jika Anda termasuk yang bingung, barangkali bisa simak tutorial Yii ini, yaitu tentang tutorial membuat CRUD Yii tanpa menggunakan Gii.

Tutorial Membuat CRUD Yii Tanpa Menggunakan Gii

Seperti project berbasis web yang lain, pastinya kita harus siapkan terlebih dahulu databasenya. Berikut ini adalah struktur database yang akan dibuat fungsi crud nya

nama database: pegawai

nama tabel: pegawai (nik, nama, no_telp, status, alamat)

Setelah database siap, pertama kita buat terlebih dahulu modelnya. Model yang dibuat, selain coding manual, sebenarnya juga bisa langsung generate dari gii, karena kode nya kurang lebih sama saja.

Ini adalah kode untuk Pegawai.php di bagian Model.

<?php

class Pegawai extends CActiveRecord {

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public function tableName() {
        return 'pegawai';
    }

    public function rules() {
        return array(
            array('nik, nama, no_telp, status, alamat', 'required', 'message' => '{attribute} tidak boleh kosong.'),
        );
    }

    public function attributeLabels() {
        return array(
            'nik' => 'NIK',
            'nama' => 'Nama',
            'no_telp' => 'No Telp',
            'status' => 'Status',
            'alamat' => 'Alamat'
        );
    }

}

Selanjutnya, untuk bagian Controller, buat file di folder Controller dengan nama PegawaiController.php, dan ini adalah kode nya:

class PegawaiController extends Controller {

public function actionPegawai() {
    $data = Pegawai::model()->findAll();
    $this->render('pegawai', array('data' => $data));
}

public function actionTambahPegawai() {
    $modelPegawai = new Pegawai;
    if (isset($_POST['Pegawai'])) {
        $modelPegawai->nama = $_POST['Pegawai']['nama'];    
        $modelPegawai->no_telp = $_POST['Pegawai']['no_telp'];
        $modelPegawai->status = $_POST['Pegawai']['status'];
        $modelPegawai->alamat = $_POST['Pegawai']['alamat'];
        if ($modelPegawai->save()) {
            $this->redirect(array('Pegawai'));
        }
    }

    $this->render('tambahpegawai', array('model' => $modelPegawai));
}

public function actionEditPegawai($nik) {
    $modelPegawai = Pegawai::model()->findByPk($nik);
    if (isset($_POST['Pegawai'])) {
        $modelPegawai->nama = $_POST['Pegawai']['nama'];
        $modelPegawai->no_telp = $_POST['Pegawai']['no_telp'];
        $modelPegawai->status = $_POST['Pegawai']['status'];
        $modelPegawai->alamat = $_POST['Pegawai']['alamat'];
        if ($modelPegawai->save()) {
            $this->redirect(array('pegawai'));
        }
    }

    $this->render('editpegawai', array('model' => $modelPegawai));
}

public function actionHapusPegawai($nik) {
    if (Pegawai::model()->deleteByPk($nik)) {
        $this->redirect(array('pegawai'));
    } else {
        throw new CHttpException(404, 'Data gagal dihapus');
    }
}

Dan untuk bagian view, terdapat tiga file, yaitu tambahpegawai.php, pegawai.php, dan editpegawai.php

Pertama kita buat terlebih dahulu pegawai.php, file ini bertindak sebagai bagian “index”, ketika kita menggunakan fungsi generator di Gii biasanya fungsi di Controller yang digunakan adalah actionIndex(), karena kita buatnya manual, jadi ya ini file view untuk bagian actionPegawai:

<div class="sub-content">
    <h3>Pegawai</h3>
    <div class="text-right right">
        <?php echo CHtml::link('Tambah Pegawai', array('pegawai/tambahpegawai')); ?>
    </div>
    <table class="table table-bordered">
        <thead>
            <tr>
                <th>NIK</th>
                <th>Nama</th>
                <th>No Telp</th>
                <th>Status</th>
                <th>Alamat</th>
                <th>Action</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($data as $model) : ?>
            <tr>
                <td><?php echo $model->nik; ?></td>
                <td><?php echo $model->nama; ?></td>
                <td><?php echo $model->no_telp; ?></td>
                <td><?php echo $model->status; ?></td>
                <td><?php echo $model->alamat; ?></td>
                <td>
                    <?php echo CHtml::link(CHtml::encode("Edit"), array('editpegawai', 'pegawai' => $model->nik)); ?> |
                    <?php echo CHtml::link(CHtml::encode("Delete"), array('hapuspegawai', 'pegawai' => $model->nik)); ?>
                </td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
</div>

Kemudian kita harus membuat file tambahpegawai.php di bagian View yang berfungsi sebagai interface form untuk diinput.

<div class="sub-content">
    <h2>Tambah Pegawai</h2>
    <?php echo CHtml::beginForm(array('pegawai/tambahpegawai')); ?>
    <div>
        <?php echo CHtml::activeLabel($model, 'nik'); ?>
        <?php echo CHtml::activeTextField($model, "nik", ""); ?>
    </div>

    <div>
        <?php echo CHtml::activeLabel($model, 'nama'); ?>
        <?php echo CHtml::activeTextField($model, "nama", ""); ?>
    </div>

    <div>
        <?php echo CHtml::activeLabel($model, 'no_telp'); ?>
        <?php echo CHtml::activeTextField($model, "no_telp", ""); ?>
    </div>

    <div>
        <?php echo CHtml::activeLabel($model, 'status'); ?>
        <?php echo CHtml::activeDropDownList($model, "status", array('Tetap' => 'Tetap', 'Kontrak' => 'Kontrak'), array('empty' => '- Pilih Status Pegawai -'))
        ?>
    </div>

    <div>
        <?php echo CHtml::activeLabel($model, 'alamat'); ?>
        <?php echo CHtml::activeTextField($model, "alamat", ""); ?>
    </div>

    <div>
        <?php echo CHtml::submitButton('Submit'); ?>
        <?php echo CHtml::endForm(); ?>
    </div>
</div>

Terakhir, kita buat juga file editpegawai.php, kodenya mirip seperti file tambahpegawai.ph, hanya berbeda beberapa baris

<div class="sub-content">
    <h2>Edit Pegawai</h2>
    <?php echo CHtml::beginForm(array('editpegawai', 'pegawai'=>$model->nik)); ?>

    <div>
        <?php echo CHtml::activeLabel($model, 'nama'); ?>
        <?php echo CHtml::activeTextField($model, "nama", ""); ?>
    </div>

    <div>
        <?php echo CHtml::activeLabel($model, 'no_telp'); ?>
        <?php echo CHtml::activeTextField($model, "no_telp", ""); ?>
    </div>

    <div>
        <?php echo CHtml::activeLabel($model, 'status'); ?>
        <?php echo CHtml::activeDropDownList($model, "status", array('Tetap' => 'Tetap', 'Kontrak' => 'Kontrak'), array('empty' => '- Pilih Status Pegawai -'))
        ?>
    </div>

    <div>
        <?php echo CHtml::activeLabel($model, 'alamat'); ?>
        <?php echo CHtml::activeTextField($model, "alamat", ""); ?>
    </div>

    <div>
        <?php echo CHtml::submitButton('Submit'); ?>
        <?php echo CHtml::endForm(); ?>
    </div>
</div>

Nah, sekarang semua kode telah lengkap, silakan dicoba di localhost/projectAnda/index.php?r=pegawai
Jika sudah berhasil, selamat buat Anda. Jika belum berhasil, silakan cari-cari tahu kesalahannya dimana 😀

Oh iya, perlu diketahui bahwa kode di atas sebenarnya menurut saya tidak efisien, kenapa? karena di Yii ada cara yang lebih bagus ketika membuat CRUD. Nantikan tutorial selanjutnya, atau silakan coba-coba sendiri.

Sekian tutorial membuat crud tanpa menggunakan Gii, semoga bermanfaat.

Leave a Reply

Your email address will not be published. Required fields are marked *