Di dalam aplikasi yang kompleks seringkali ditemukan form yang berasal dari banyak model. Di tutorial ini akan dijelaskan cara untuk menggabungkannya.
1. Kita akan memodifikasi _form.php yang berada di folder backend/views/companies, namun sebelumnya kita ke public function actionCreate yang berada di CompaniesController.php
Tambahkan model branch dan jangan lupa menambahkan modelnya di use.
1 |
$branch = new Branches(); |
Setelah object branch dibuat, kita melewatkan object tersebut ke file create :
1 2 3 4 |
return $this->render('create', [ 'model' => $model, 'branch'=> $branch, ]); |
2. Masuk ke create.php dan tambahkan juga parameter $branch :
1 2 3 4 |
<?= $this->render('_form', [ 'model' => $model, 'branch'=> $branch, ]) ?> |
3. Sekarang kita bisa mengakses objek branch pada _form.php yang dimiliki oleh companies.
1 2 3 4 5 |
<?= $form->field($branch, 'branch_name')->textInput(['maxlength' => true]) ?> <?= $form->field($branch, 'branch_address')->textInput(['maxlength' => true]) ?> <?= $form->field($branch, 'branch_status')->dropDownList([ 'active' => 'Active', 'inactive' => 'Inactive', ], ['prompt' => 'Status']) ?> |
Sehingga kita sekarang memiliki form sebagai berikut :
4. Kembali ke CompaniesController.php dan lakukan beberapa modifikasi :
1 |
if ($model->load(Yii::$app->request->post()) && $branch->load(Yii::$app->request->post())) { |
1 2 3 |
$branch->companies_company_id = $model->company_id; $branch->branch_created_date = date('Y-m-d h:m:s'); $branch->save(); |
Sehingga companiesController.php menjadi seperti ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
<?php namespace backend\controllers; use Yii; use backend\models\Companies; use backend\models\Branches; use backend\models\CompaniesSearch; use yii\web\Controller; use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; use yii\web\UploadedFile; /** * CompaniesController implements the CRUD actions for Companies model. */ class CompaniesController extends Controller { public function behaviors() { return [ 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['post'], ], ], ]; } /** * Lists all Companies models. * @return mixed */ public function actionIndex() { $searchModel = new CompaniesSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); } /** * Displays a single Companies model. * @param integer $id * @return mixed */ public function actionView($id) { return $this->render('view', [ 'model' => $this->findModel($id), ]); } /** * Creates a new Companies model. * If creation is successful, the browser will be redirected to the 'view' page. * @return mixed */ public function actionCreate() { $model = new Companies(); $branch = new Branches(); if ($model->load(Yii::$app->request->post()) && $branch->load(Yii::$app->request->post())) { $imageName = $model->company_name; if(!empty($model->file)){ $model->file = UploadedFile::getInstance($model,'file'); $model->file->saveAs('uploads/'.$imageName.'.'.$model->file->extension ); $model->logo = 'uploads/'.$imageName.'.'.$model->file->extension; } $model->company_created_date = date('Y-m-d h:m:s'); $model->save(); $branch->companies_company_id = $model->company_id; $branch->branch_created_date = date('Y-m-d h:m:s'); $branch->save(); return $this->redirect(['view', 'id' => $model->company_id]); } else { return $this->render('create', [ 'model' => $model, 'branch'=> $branch, ]); } } /** * Updates an existing Companies 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->company_id]); } else { return $this->render('update', [ 'model' => $model, ]); } } /** * Deletes an existing Companies 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 Companies model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param integer $id * @return Companies the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = Companies::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } } } |
Tutorial ini sebagai dokumentasi dan pembelajaran pribadi sekalian belajar terjemahin bahasa Inggris, dan siapa tahu bermanfaat buat orang lain. Sumber lengkapnya diambil dari Youtube DoingITEasy Channel.