Scenario sama artinya dengan bahasa kita sehari-hari:skenario. Ini berarti rencana lakon suatu sandiwara. Tetapi, di konteks aplikasi, skenario berarti kemungkinan-kemungkinan kondisi tertentu. Sebagai misal, ketika kita membuat satu tabel untuk menampung data surat-menyurat, tentu kita memiliki perlakuan berbeda untuk data surat masuk dan keluar. Untuk surat keluar, kita mengharuskan adanya data tanggal pengiriman, sementara untuk surat keluar kita tidak mewajibkannya. Untuk urusan tersebut, kita menggunakan scenario. Mari kita diskusikan.
Skenario sebenarnya digunakan untuk kepentingan validasi sebuah model. Nah, dalam satu model, kita bisa menerapkan beberapa jenis validasi dengan menggunakan scenario. Pada artikel ini, kita akan mengangkat kasus data surat-menyurat dengan satu tabel. Berikut ini adalah tabelnya:
Dari tabel tersebut, mari kita gunakan alat canggih milik yii, yaitu Gii. Buat model dan CRUD-nya melalui
Selanjutnya, pada model (nama model adalah
Selain menggunakan kode di atas, yakni fungsi scenarios(), kita juga bisa membuat alternatif melalui fungsi
Pada controller, kita akan membuat dua fungsi untuk memanggil pembuatan surat masuk (
Sementara pada views, pada file
Hasilnya akan menjadi seperti gambar berikut:
Masih di views, kita akan modifikasi file
Nah, jadilah form kita. Untuk form membuat surat masuk seperti ini:
Pada gambar di atas field
Selamat belajar, semoga bermanfaat!
Referensi:
Skenario sebenarnya digunakan untuk kepentingan validasi sebuah model. Nah, dalam satu model, kita bisa menerapkan beberapa jenis validasi dengan menggunakan scenario. Pada artikel ini, kita akan mengangkat kasus data surat-menyurat dengan satu tabel. Berikut ini adalah tabelnya:
Dari tabel tersebut, mari kita gunakan alat canggih milik yii, yaitu Gii. Buat model dan CRUD-nya melalui
http://localhost/?r=gii
. Hasilnya kita akan membuat file model Surat.php
dan SuratSearch.php
(hasil dari generate CRUD), file controller SuratController.php serta file-file view pada folder views/surat
.Selanjutnya, pada model (nama model adalah
models/Surat.php
) kita modifikasi dengan skenario berikut:class Surat extends \yii\db\ActiveRecord
{
const SCENARIO_MASUK = 'Surat Masuk';
const SCENARIO_KELUAR = 'Surat Keluar';
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[self::SCENARIO_MASUK] = ['jenis', 'nomor', 'perihal', 'tanggal', 'tgl_terima', 'penerima', 'pengirim'];
$scenarios[self::SCENARIO_KELUAR] = ['jenis', 'nomor', 'perihal', 'tanggal', 'tgl_kirim', 'penerima'];
return $scenarios;
}
// kode lainnya
}
Selain menggunakan kode di atas, yakni fungsi scenarios(), kita juga bisa membuat alternatif melalui fungsi
rules()
pada model Surat dengan isi sebagai berikut:public function rules()
{
return [
[['jenis', 'nomor', 'perihal', 'tanggal','tgl_terima', 'penerima', 'pengirim'], 'required','on' => self::SCENARIO_MASUK],
[['jenis', 'nomor', 'perihal', 'tanggal', 'tgl_kirim', 'penerima'], 'required', 'on' => self::SCENARIO_KELUAR],
[['jenis', 'nomor', 'perihal', 'tanggal', 'tgl_kirim', 'tgl_terima', 'penerima', 'pengirim', 'status'], 'required'],
[['jenis'], 'string'],
[['tanggal', 'tgl_kirim', 'tgl_terima'], 'safe'],
[['status'], 'integer'],
[['nomor', 'perihal', 'penerima', 'pengirim'], 'string', 'max' => 100],
];
}
Pada controller, kita akan membuat dua fungsi untuk memanggil pembuatan surat masuk (
?r=surat/create-masuk
) dan surat keluar (?r=surat/create-keluar
). Modifikasi pada controller menjadi seperti berikut:public function actionCreateKeluar()
{
$model = new Surat(['scenario' => Surat::SCENARIO_KELUAR]);
$model->jenis = $model->scenario;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
public function actionCreateMasuk()
{
$model = new Surat(['scenario' => Surat::SCENARIO_MASUK]);
$model->jenis = $model->scenario;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
Sementara pada views, pada file
index.php
, untuk membuat tombol kita modifikasi di bagian tombol menjadi seperti berikut:<p>
<?= Html::a('Tambah Surat Keluar', ['create-keluar'], ['class' => 'btn btn-success']) ?>
<?= Html::a('Tambah Surat Masuk', ['create-masuk'], ['class' => 'btn btn-success']) ?>
</p>
Hasilnya akan menjadi seperti gambar berikut:
Masih di views, kita akan modifikasi file
_form.php
di bagian surat-form
menjadi seperti berikut:<div class="surat-form">
<?php $form = ActiveForm::begin(['layout'=>'horizontal']); ?>
<?= $form->field($model, 'nomor')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'perihal')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'tanggal')->textInput() ?>
<?= $form->field($model, 'tgl_kirim')->textInput() ?>
<?php
if(in_array('tgl_terima', $model->scenarios()[$model->scenario])){
echo $form->field($model, 'tgl_terima')->textInput();
}
?>
<?= $form->field($model, 'penerima')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'pengirim')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'status')->textInput() ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
Nah, jadilah form kita. Untuk form membuat surat masuk seperti ini:
Pada gambar di atas field
tgl_kirim
tidak wajib diisi karena memang tidak kita cantumkan dalam field wajib isi pada scenario 'Surat Masuk'.Selamat belajar, semoga bermanfaat!
Referensi:
Tidak ada komentar:
Posting Komentar