Sabtu, 05 September 2015

Dasar YII2 : Hak Akses Sederhana

Kali ini kita akan belajar untuk membuat pengaturan hak akses sederhana, yaitu : "Yang boleh membuat, mengubah dan menghapus konten adalah user yang sudah login"

Pertama-tama, kita buka SiswaController.php yang ada pada folder controller. Kemudian kita tambahkan use yii\filters\AccessControl; seperti gambar di bawah.

Karena kita memerlukan class AccessControl untuk pengaturan hak akses. Lalu kita tambahkan beberapa script pada public function behaviors() di dalam return

'access'=>[
                'class'=>AccessControl::classname(),
                'only'=>['create','update','delete'],
                'rules'=>[
                    [
                        'allow'=>true,
                        'roles'=>['@'],
                    ],
                ],
            ],

Sehingga akan seperti gambar

'only'=>['create','update','delete'], berarti pengaturan tentang membuat, mengubah dan menghapus. Kalau yang ingin dibatasi adalah delete saja, berarti 'only'=>['delete'],

'rules'=>[
                    [
                        'allow'=>true,
                        'roles'=>['@'],
                    ],
                ],

Berarti yang boleh melakukannya ('allow'=>'true',) adalah user yang sudah login ('roles'=>['@'],). Mari kita coba buka http://localhost/basic/web/index.php?r=siswa (basic diganti folder projek kita ya)

Lalu kita coba tekan tombol ijo Create dan hasilnya

Sekarang, kita harus login terlebih dahulu jika ingin membuat, mengubah ataupun menghapus data.

Sekian dan terima kasih... Silahkan bertanya, jika ada yang belum dipahami.

Jumat, 04 September 2015

Dasar YII2 : Membuat CRUD Dengan GII

Yahoo... Selamat datang. Kali ini kita akan belajar bersama membuat CRUD pada YII dengan menggunakan GII. Eh? GII itu apaan? Singkatnya, GII adalah script generator yang ada pada YII. Jadi, kita tinggal tulis tulis tulis dan klik klik lalu jadi deh. Entah itu Model, Controller, CRUD sampai Extension. Tertarik?

Di sini kita akan membuat CRUD berdasarkan database yang sudah ada. Jadi, pertama-tama buat database dengan nama yii2basic dan tabel dengan nama siswa dengan ketentuan seperti ini :



Setelah itu buka http://localhost/basic/web/index.php?r=gii (basic diganti dengan nama folder projek kita ya). Nanti akan muncul tampilan seperti ini :

Di gambar kok url-nya beda? Itu karena folder projek saya kali ini bukan basic tapi yii. Tapi, sama aja kok. Kemudian klik tombol start yang ada di bawah tulisan Model Generator. Sehingga nanti akan mucul tampilan seperti ini:

Pada Table Name isikan nama tabel yang tadi telah kita buat. Isi pake huruf kecil aja ya. Nanti, Model Class akan otomatis terisi. Jika tabel yang kita gunakan mempunyai relasi dengan tabel lain, maka Generate Relation harus dicentang ya.

Setelah itu, tekan Preview. Lho? Kok tidak terjadi apa-apa sih? Yang bener? Coba scrool ke bawah, nanti akan kelihatan seperti ini :

Tekan Generate. Lalu lihat (kalau tidak kelihatan, scrool ke bawah) apakah sudah berhasil atau belum. Kalau berhasil, nanti seperti ini :

Kalau ada error, coba ubah Permission dari folder aplikasi kita menjadi 777, dengan kata lain siapapun boleh liat, ngedit, ngapus.

Setelah berhasil, tekan tombol CRUD Generator yang ada di kiri atas. Dan isi Model Class dengan app\models\Siswa, Search Model Class dengan app\models\SiswaSearch, Controller Class dengan app\controllers\SiswaController dan View Path dengan @app/views/siswa.


Model Class adalah model yang digunakan oleh CRUD. Search Model Class adalah model yang digunakan untuk pencarian data pada CRUD. Controller Class adalah controller yang digunakan CRUD. View Path adalah alamat CRUD. @app/views/siswa berarti membuat folder baru (siswa) di dalam folder views.

Saya pernah mengisi View Path dengan app/views/siswa dan hasilnya justru membuat folder app di dalam folder views.

Tekan tombol Preview, setelah itu mungkin akan kelihatan seperti ini :


Kalau ada  diff  itu berarti file sudah ada dan coba tekan  diff  untuk melihat perbedaan antara yang sudah ada dan yang akan dibuat oleh gii. Centang saja (berarti di-overwrite) dan tekan tombol Generate. Jika tidak ada error, berarti CRUD sudah berhasil di buat.

Jika CRUD sudah berhasil kita buat, bagaimana kita mengaksesnya? cukup buka url http://localhost/basic/web/index.php?r=siswa (basic disesuaikan dengan nama folder projek kita), nanti hasilnya akan seperti berikut :

Silahkan diisi, diubah dan dihapus.

Tambahan:
Jika kita menggunakan YII 2 yang Advance, kita bisa menggunakan GII pada backend maupun frontend. Seandainya kita membuat model ataupun CRUD pada backend, saya sarankan ubah name space dari "app\models\***" menjadi "backend\models\***". Begitu juga yang frontend, ubah menjadi "frontend\models\***" . Agar lebih mudah membedakan model dan crud backend dan frontend.

Sekian dan terima kasih... Silahkan bertanya jika ada yang kurang anda pahami.

Kamis, 03 September 2015

Dasar YII2 : Menggunakan Database

Setelah kemarin kita berhasil membuat form, sekarang kita akan mencoba menggunakan database pada YII 2. Di sini, saya menggunakan database MySQL.

Jadi, pertama-tama kita buat dulu sebuah database dengan nama yii2basic. Setelah itu kita buat tabel dengan nama negara. Bila tidak ingin repot, sebelum membuat tabel negara, silahkan copy kode SQL berikut dan jalankan pada MySQL.

CREATE TABLE `negara` (
  `code` CHAR(2) NOT NULL PRIMARY KEY,
  `name` CHAR(52) NOT NULL,
  `population` INT(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `negara` VALUES ('AU','Australia',18886000);
INSERT INTO `negara` VALUES ('BR','Brazil',170115000);
INSERT INTO `negara` VALUES ('CA','Canada',1147000);
INSERT INTO `negara` VALUES ('CN','China',1277558000);
INSERT INTO `negara` VALUES ('DE','Germany',82164700);
INSERT INTO `negara` VALUES ('FR','France',59225700);
INSERT INTO `negara` VALUES ('GB','United Kingdom',59623400);
INSERT INTO `negara` VALUES ('IN','India',1013662000);
INSERT INTO `negara` VALUES ('RU','Russia',146934000);
INSERT INTO `negara` VALUES ('US','United States',278357000);



Lalu buka db.php pada folder config dan sesuaikan host, dbname, username dan password. Karena kita tadi membuat database dengan nama yii2basic, maka pastikan dbname=yii2basic.



Kemudian buat file Negara.php dan isi seperti berikut :

<?php

namespace app\models;

use yii\db\ActiveRecord;

class Negara extends ActiveRecord
{
}

Setelah itu, buat file NegaraController.php pada folder controller dan isi seperti berikut :

<?php

namespace app\controllers;

use yii\web\Controller;
use yii\data\Pagination;
use app\models\Negara;

class NegaraController extends Controller
{
    public function actionIndex()
    {
        $query = Negara::find();

        $pagination = new Pagination([
            'defaultPageSize' => 5,
            'totalCount' => $query->count(),
        ]);

        $negara = $query->orderBy('name')
            ->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();

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

Lalu buat folder dengan nama negara di dalam folder views. Jangan lupa buat file index.php di dalamnya dan isi dengan script berikut :

<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Countries</h1>
<ul>
<?php foreach ($negara as $data): ?>
    <li>
        <?= Html::encode("{$data->name} ({$data->code})") ?>:
        <?= $data->population ?>
    </li>
<?php endforeach; ?>
</ul>

<?= LinkPager::widget(['pagination' => $pagination]) ?>
Nanti hasilnya akan seperti berikut :



Rabu, 02 September 2015

Dasar YII2 : Menggunakan Form

Setelah kemarin kita sudah bisa membuat sebuah pesan sederhana, sekarang kita akan membuat sebuah form dan menggunakannya. Tapi belum menggunakan database lho ya.

Pertama, kita buat Model terlebih dahulu di folder models. Intiya, buat file FormAntri.php pada folder models, dan isi :

<?php

namespace app\models;

use Yii;
use yii\base\Model;

class FormAntri extends Model
{
  public $nama;
  public $email;
  
  public function rules()
  {
    return [
      [['nama', 'email'], 'required'],
      ['email', 'email'],
    ];
  }
}

namespace app\models anggap saja sebagai alamat atau path model yang kita buat.

Kita memerlukan Yii dan Model dari yii\base\ karena class model harus  meng-extends class Model.

$nama dan $email adalah property dari class  FormAntri.

Public function rules() bisa dianggap sebagai validasi. Dari perintah di atas, bisa dilihat kalau nama dan email harus di isi, serta email harus sesuai dengan format email.

Lanjut ke controller, buka SiteController.php dan buat public function actionAntri seperti berikut :

public function actionAntri()
{
  $model = new FormAntri();

  if ($model->load(Yii::$app->request->post()) && $model->validate()){
    return $this->render('antri-ok',['model' => $model]);
  }else{
    return $this->render('antri', ['model' => $model]);
  }
}
Di sini, kita membuat sebuah objek FormAntri. Jika ada permintaan pengiriman data menggunakan post dan sudah sesuai dengan validasi, maka akan diarahkan ke antri-ok dengan nilai model sesuai dengan $model. Selain itu, akan diarahkan ke antri, yang merupakan form tempat inputan.

Mari kita buat antri.php di folder site, dan isi dengan script seperti berikut :

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(); ?>

<?= $form->field($model, 'nama') ?>
<?= $form->field($model, 'email') ?>

<div class="form-group">
 <?= Html::submitButton('Ok', ['class' => 'btn btn-primary']) ?>
</div>

<?php ActiveForm::end(); ?>

Penggunaan yii\helpers\Html adalah untuk memudahkan mengidentifikasi kalau terjadi error.

Sedangkan yii\widget\ActiveForm diperlukan jika kita ingin membuat form inputan. Form inputan itu, harus berada di antara ActiveForm::begin dan ActiveForm::end.

<?= $form->field($model, 'nama') ?> berarti membuat sebuah inputan dengan nama 'nama'. Anggap saja <input type='text' name='nama'>.

<div class="form-group">
  <?= Html::submitButton('Ok ['class' => 'btn btn-primary']) ?>
</div>

Berarti membuat sebuah div dengan class form-group dengan isi sebuah tombol submit dengan value 'Ok' yang mempunyai class 'btn btn-primary' (anggap saja <input type='submit' value='Ok' class='btn btn-primary'>).

Setelah itu, buat antri-ok.php di folder site dan isi dengan script berikut:

<?php
use yii\helpers\Html;
?>
<p>Informasi yang sudah anda kirim adalah :</p>

<ul>
  <li><label>Nama</label>: <?= Html::encode($model->nama) ?></li>
  <li><label>Email</label>: <?= Html::encode($model->email) ?></li>
</ul>

antri-ok.php hanya akan menampilkan data yang sudah dikirimkan oleh $model.

lalu coba buka url http://localhost/namaProjek/web/index.php?r=site/antri maka nanti akan muncul tampilan seperti berikut:







Bagaimana? Jika ada kesulitan silahkan bertanya.

Selasa, 01 September 2015

Dasar YII2 : Membuat Pesan Halo

Kemarin kita sudah tahu bagaimana memasang YII2 di laptop/pc kita. Sekarang, bagaimana kalau kita mencoba membuat sesuatu nih. Biasanya kalau kita baru belajar bahasa pemrograman, hal yang pertama kita coba adalah membuat pesan "Hello World". Meskipun menurut saya itu membosankan, tapi bagaimana kalau kita coba saja itu. Tapi pesannya jangan "Hello World" melulu, kita ganti nanti.

Oh, iya. Bagi yang mau belajar YII saya sarankan membaca dokumentasinya di http://www.yiiframework.com/doc-2.0/guide-README.html. Tentu saja dokumentasinya itu bahasa inggris. Tapi, jangan menyerah. Tinggal buka google translate dan ditranslate aja tuh, meskipun tata bahasanya nanti belepotan.

Sebelumnya, bagi yang belum tahu, YII itu... MCV. Kalau kita ingin membuat form, halaman, atau apalah itu, maka kita perlu membuat Model, Controller dan View. Dalam pandangan saya, Model itu Objek sesuatu yang akan kita buat, Controller itu penghubung antara Model dengan View, sedangkan View itu yang memuat tampilan yang akan dilihat oleh user. Mungkin penjelasan saya kurang mudah dicerna, jadi silahkan baca saja langsung apa itu MVC di sini.

Baiklah, kita akan memulai membuat karya pertama kita. Kalau biasanya kita perlu membuat model, controller dan view, di sini kita hanya perlu membuat controller dan view saja. Saking sederhananya yang akan kita buat. Enggak sulit kok, jadi silahkan perhatikan baik-baik ya.

Pertama, buka file SiteController.php. Letaknya berada di dalam folder controller pada folder projek kita.



Kemudian buat public function baru dengan nama actionPesan di dalam class SiteController. Fungsinya seperti berikut :

public function actionPesan($sms = 'Halo! Selamat Datang')
    {
        return $this->render('pesan',['sms' => $sms]);
    }




Lalu buat file pesan.php pada folder site. Folder site berada di dalam folder views.


Setelah itu, tulis script berikut pada pesan.php :

<?php
use yii\helpers\Html;
?>
<?= Html::encode($sms); ?>

Jika nama folder YII anda adalah 'basic' (seperti saya), maka silahkan buka url http://localhost/basic/web/index.php?r=site/pesan pada browser anda. Bila nama folder YII anda berbeda, silahkan disesuaikan. Nantinya, akan terlihat tampilan seperti berikut :



Pesan itu dapat diganti dengan menambahkannya pada url, coba buka http://localhost/basic/web/index.php?r=site/pesan&sms=Ini+Pesanku.+Pesanmu?



Baiklah, waktunya penjelasan...

http://localhost/basic/web/index.php?r=site/pesan&sms=Ini+Pesanku.+Pesanmu?

Mari kita telusuri url-nya.

http://localhost/basic/web/index.php adalah halaman awal.

r adalah ??? Jika kita perhatikan, bukankah fungsi yang ada pada SiteController selalu memiki script return $this->render(); Di sini, kita anggap saja r adalah untuk memanggil.

r=site/pesan adalah ??? site di sini mengacu pada SiteController dan juga folder site yang ada pada folder views. Sedangkan pesan mengacu pada actionPesan yang ada di dalam SiteController. Jadi, r=site/pesan dapat dianggap memanggil actionPesan di dalam SiteController.

sms=Ini+Pesanku.+Pesanmu? berarti sms memiliki nilai "Ini Pesanku. Pesanmu?" yang nantinya akan ditampilkan oleh pesan.php. Jika nilai sms tidak ditentukan, maka akan ditampilkan nilai default yang sudah didefinisikan pada actionPesan yaitu $sms = 'Halo! Selamat Datang. 

return $this->render('pesan',['sms' => $sms]) adalah ???
pesan di sini berarti pesan.php yang ada pada folder site, dan ['sms'=>$sms] berarti mengisi nilai sms dengan $sms.

<?= Html::encode($sms); ?> berarti menampilkan nilai dari $sms.

Sekian... dan terima kasih... Kalau ada pertanyaa, silahkan bertanya.