3

Upload gambar di yii2

upload gambar dengan yii2
Tutorial kali kini akan membahas cara meng upload gambar di yii2. Buat yang udah pernah buat script upload di yii1, tutorial ini ngga akan sulit kok. Karena caranya ngga jauh beda sama yii1.

Berikut tutorialnya :

1) BUAT TABEL

Misalkan kita punya tabel dengan nama “images” dengan┬ástruktur dibawah ini :
create table images yii 2

2) BUAT MODEL

Langkah selanjutnya kita buat model “Images.php” di frontend/models/. Copy script berikut ini :

<?php
namespace app\models;

class Images extends \yii\db\ActiveRecord
{
	/**
	 * @nama tabel
	 */
	public static function tableName(){
		return 'images';
	}
	
	/**
	 * settingan upload foto
	 */
    public function rules()
    {
        return [
            [['foto'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
        ];
    }
}

Penjelasan :

[['foto'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg']

– skipOnEmpty => false : gambar tidak boleh kosong (harus diisi).
– extensions : jenis gambar yang akan diupload.

3) BUAT CONTROLLER

Buat controllers dengan nama “ImagesController.php” di frontend/controllers/
Copy script berikut :

<?php
namespace frontend\controllers;

use Yii;
use yii\web\Controller;
use app\models\Images;
use yii\web\UploadedFile;

class ImagesController extends Controller
{
	public function actionCreate()
	{
		$model = new Images();
		
        if (Yii::$app->request->isPost) {
			// ambil foto
            $model->foto = UploadedFile::getInstance($model, 'foto');
			
			if ($model->validate()) {
				// upload foto
				$model->foto->saveAs('uploads/' . $model->foto->baseName . '.' . $model->foto->extension);
				
				return 'berhasil mengupload ' . $model->foto->name;
			}else {
				return 'gagal mengupload ' . $model->foto->name;
			}
			          
        }
		
		return $this->render('create', ['model'=>$model]);
	}
}

Penjelasan :

use yii\web\UploadedFile;

Script ini digunakan untuk mendapatkan informasi nama & temporary gambar setelah gambar diupload.

$model->foto->saveAs('uploads/' . $model->foto->baseName . '.' . $model->foto->extension);

Script ini digunakan untuk menyimpan hasil upload ke folder uploads/

4) BUAT VIEW

Buat folder “images” di frontend/views/.
Lalu buat file “create.php” di /frontend/views/images/, dan copy script dibawah ini :

<?php
use yii\widgets\ActiveForm;
?>

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>

    <?= $form->field($model, 'foto')->fileInput() ?>

    <button>Submit</button>

<?php ActiveForm::end() ?>

5) TEST UPLOAD

Tahap terakhir, buat folder “uploads” di frontend/web/
Screenshot from 2015-08-16 13:41:39

Sekarang coba test upload :
Screenshot from 2015-08-16 13:43:49

Jika berhasil, maka tampilannya akan seperti ini :
berhasil upload di yii2

GAGAL UPLOAD

Jika gagal (move_uploaded_file permission denied) :
gagal upload di yii2

Itu tandanya permissionnya gak cukup, solusinya di chmod dulu :

chmod -R 777 /var/www/html/yii2_advanced/frontend/web/

chmod folder

[related_post themes="text" id="1249"]

Ambar Hasbiyatmoko

Hello, I’m web developer. Passionate about programming, networking and web server. @kaskus  @facebook

3 Comments

  1. gan saya coba aplikasikan tp foto ny satu field dengan tabel lain….tp kok gagal ya? jd saya punya tabel data pribadi dan di situ ada field foto, sya coba tp gagal2 terus.

    • errornya ky gimana? photo yg diupload lebih dr 2 MB kah?

  2. Ane udah ikutin cara yg di atas ada error gan.
    Keterangan errornya :
    move_uploaded_file(uploads/example.jpg): failed to open stream: No such file or directory

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.