Di tutorial ini kita akan melakukan upload untuk menyimpan logo dalam format .jpg.
1. Pertama-tama kita harus menambahkan kolom logo di tabel Company dengan format varchar.
2. Tambahkan public variable $file pada model Companies.php
1 |
public $file; |
3. Mendefinisikan di public function rules bahwa file ini berupa tipe file dan tambahkan logo sebagai string :
1 2 3 4 5 6 7 8 9 10 11 |
public function rules() { return [ [['company_name', 'company_email', 'company_address'], 'required'], [['company_start_date', 'company_created_date'], 'safe'], [['company_status'], 'string'], [['file'],'file'], [['company_name','logo', 'company_email'], 'string', 'max' => 100], [['company_address', 'logo'], 'string', 'max' => 255] ]; } |
4. Modifikasi _form.php pada companies create form untuk menampilkan file input dengan menambahkan option form enctype => ‘multipart/form-data’ :
1 |
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?> |
1 |
<?= $form->field($model, 'file')->fileInput() ?> |
5. Modifikasi public function actionCreate pada CompaniesController agar file tersimpan di dalam aplikasi.
Beri nama imageName dengan nama company :
1 |
$imageName = $model->company_name; |
Ambil informasi yang dimiliki file menggunakan Class UploadedFile bawaan Yii :
1 |
$model->file = UploadedFile::getInstance($model,'file'); |
Save ke directory web/uploads diikuti nama file dan extensionnya. Jangan lupa untuk membuat folder ‘uploads’ di dalam folder web.
1 |
$model->file->saveAs('uploads/'.$imageName.'.'.$model->file->extension ); |
Save ke kolom logo di dalam database :
1 |
$model->logo = 'uploads/'.$imageName.'.'.$model->file->extension; |
Jangan lupa menambahkan use UploadedFile :
1 |
use yii\web\UploadedFile; |
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 |
<?php namespace backend\controllers; use Yii; use backend\models\Companies; 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(); if ($model->load(Yii::$app->request->post())) { $imageName = $model->company_name; $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(); return $this->redirect(['view', 'id' => $model->company_id]); } else { return $this->render('create', [ 'model' => $model, ]); } } /** * 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.'); } } } |
Selesai, silahkan masukkan logo ke dalam database melalui url, maka file akan muncul di direktori web dan akan tersimpan di database.
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.