Mengenal Scenario pada Model di Yii2 - Hallo sahabat Dev-Create, Pada Artikel yang anda baca kali ini dengan judul Mengenal Scenario pada Model di Yii2, kami telah mempersiapkan artikel ini dengan baik untuk anda baca dan ambil informasi didalamnya. mudah-mudahan isi postingan Artikel Model, Artikel Scenario, Artikel Skenario, Artikel yii2, yang kami tulis ini dapat anda pahami. baiklah, selamat membaca.

Judul : Mengenal Scenario pada Model di Yii2
link : Mengenal Scenario pada Model di Yii2

Baca juga


Mengenal Scenario pada Model di Yii2

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 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:


Demikianlah Artikel Mengenal Scenario pada Model di Yii2

Sekianlah artikel Mengenal Scenario pada Model di Yii2 kali ini, mudah-mudahan bisa memberi manfaat untuk anda semua. baiklah, sampai jumpa di postingan artikel lainnya.

Anda sekarang membaca artikel Mengenal Scenario pada Model di Yii2 dengan alamat link https://dev-create.blogspot.com/2017/06/mengenal-scenario-pada-model-di-yii2.html