[Yii Framework]Delete dan Update File

Pada postingan sebelumnya disini saya telah membahas tentang cara untuk melakukan upload file pada Yii Framework. Kali ini saya akan menuliskan cara melakukan delete dan update file pada Yii Framework…

Sebelumnya, di PHP sudah ada fungsi yang dapat kita gunakan untuk menghapus suatu file, yaitu: “unlink(‘namaFile’)”. Yah, jelas kita bisa manfaatkan fungsi tersebut untuk melakukan proses delete dan update file pada aplikasi kita. Okeh langsung saja…

Untuk melakukan delete file, anda cukup merubah controller anda tepatnya pada “actionDelete()” menjadi seperti berikut:

	public function actionDelete($id)
	{
		$model=$this->loadModel($id);
		if(Yii::app()->request->isPostRequest)
		{
			unlink(Yii::app()->basePath . 
                                '/../namaFolder/' . $model->id.'.pdf');			
			$this->loadModel($id)->delete();
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) 
                                 ? $_POST['returnUrl'] : array('admin'));
		}
		else
			throw new CHttpException(400,
                        'Invalid request. Please do not repeat this request again.');
	}

Yah, dapat anda lihat saya disana hanya menambahkan dua baris code, baris pertama adalah “$model=$this->loadModel($id);” yang berguna untuk menangkap nilai pada model yang memiliki Primary Key $id. Sedangkan baris kedua yang saya tambahkan berisi fungsi “unlink()” yang kita gunakan untuk menghapus file yang kita maksud…

Okeh, sekarang kita sudah tahu cara melakukan upload(create) dan delete file. Sekarang kita tinggal membuat cara melakukan update file. Logika update sendiri adalah delete—->create, jadi dengan pengetahuan yang sudah kita miliki tentang create dan delete, tentu kita sudah bisa mereka-reka code untuk melakukan update. Okeh, setelah saya kotak-katik controller pada “actionUpdate()”, kurang lebih code untuk update file akan menjadi seperti berikut:

	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);
		if(isset($_POST['Buku']))
		{
			unlink(Yii::app()->basePath . 
                                '/../dok/' . $model->id.'.pdf');	
			$model->attributes=$_POST['Buku'];
			$model->buku=CUploadedFile::getInstance($model,'buku');
			
			if($model->save())
			{
				$model->buku->saveAs(Yii::app()->basePath . 
                                              '/../dok/' . $model->id.'.pdf');
				$this->redirect(array('view','id'=>$model->id));
			}
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

Penjelasan: Disana saya hanya menambahkan code untuk melakukan delete file(unlink), menangkap file yang ingin di upload, dan menyimpan file yang akan di upload. Jika anda teliti lagi, itu adalah kombinasi code create dan delete😀 ..

 

Sekian… Selamat mencoba…

Semoga membantu😀

36 Responses to [Yii Framework]Delete dan Update File

  1. p-man says:

    gan, maaf ne, saya udah berhasil upload image n nampilinnya, tapi yg ini kok gak berhasil ya, error malah keluar window baru gitu yg isinya berantakan…

    knpa kira2 ya??.,

    maaf nih masih newbie bgt.,

  2. sabitzhabit says:

    coba liatin gmana pesen error nya gan?

  3. p-man says:

    unlink(D:\xampp\htdocs\lazis\protected/../images/foto/.jpg[function.unlink: No such file directory

  4. sabitzhabit says:

    itu arti nya ga ada folder/file yang di maksud gan. Agan salah deklarasiin link nya gan.
    Lagian itu ane liat kok “/.jpg” gan, harus ny itu kan ada nama file nya gan..

  5. p-man says:

    mav gan baru bales,,.
    hmmmm, gitu ya gan..
    ok ok , saya ciba dulu..

    oia gan punya postingan yg caranya buat convert k pdf ga?, kalo ane baca2 dari forum, katanya pake tcpdf, tapi masih bingung nih gan makenya..
    punya ndak postingan tntang itu??.,
    sama postingan tentang ngambil record dari tabel lain,.. jadi pas mau input, d atasnya form itu ada nama petugas yang d ambil dari tabel user, gimana ya gan caranya.,, makasih n maaf gan sebelumnya, bener2 newbie nih, baru 2 minggu pake framework..

  6. sabitzhabit says:

    kalo yg convert pdf belum gan. Ntar ane coba gan.. Kalo yg ngmbil record, maksud agan mau nyimpen nama petugas nya secara otomatis gtu gan tanpa d input, tapi dari yg login, gitu bukan?? kalo bener kayak gitu, udah pernah ane posting judul nya ada keyword “auto save” nya gan. Tapi kalo mau ambil record biasa dari tabel lain, agan cukup buat coding kayak gini gan untuk ngambil nilai nya:
    $model=NamaTabelAgan::model()->findByAttributes(array(‘namaattribut’=>$id));

    ato agan bisa buat pake sql biasa, udah pernah ane post juga dg keyword “pure sql”…

  7. p-man says:

    iya2, yang ane maksud ambil aja, tanpa input otomatis,..,

    oia gan, ternyata ada problem baru nih waktu update gambar, kalo gambar d upload udah bisa masuk k folder yg d tuju, trus kalo mau update kan gambar yg lama harus ilang dulu nih gan baru gambar yg baru masuk kan, tapi ini punya ane gamabr yg lama ilang yg baru ndak mau masuk, malah keluar error gini gan

    Fatal error: Call to a member function saveAs() on a non-object in D:\xampp\htdocs\lazis\protected\controllers\MuzakkiController.php on line 116

    ini controller ane gan

    public function actionUpdate($id)
    {
    $model=$this->loadModel($id);
    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST[‘Muzakki’]))
    {
    $imageLocation = Yii::app()->basePath . ‘/../images/foto/’ . $model->id_muzzaki . ‘.jpg’; // definisi tempat gambar

    $foto = Muzakki::model()->find(“id_muzzaki = “.$model->id_muzzaki); // query table where id_muzzaki = id_muzzaki sekarang

    if(!empty($foto->foto)) // if foto(image) field di dalam tabel tidak kosong
    {
    unlink($imageLocation); // hapus images
    }

    $model->foto = CUploadedFile::getInstance($model,’foto’);
    $model->attributes=$_POST[‘Muzakki’];
    if($model->save())
    {
    $model->foto->saveAs(Yii::app()->basePath . ‘/../images/foto/’ . $model->id_muzzaki . ‘.jpg’);
    $this->redirect(array(‘view’,’id’=>$model->id_muzzaki));
    }
    }

    $this->render(‘update’,array(
    ‘model’=>$model,
    ));
    }

  8. sabitzhabit says:

    itu artinya data yang agan masukin belum ketangkep sama program gan. Kayak nya salah disini gan:

    $model->foto = CUploadedFile::getInstance($model,’foto’);
    $model->attributes=$_POST[‘Muzakki’];

    harus nya dibalik jdi kayak gini gan:

    $model->attributes=$_POST[‘Muzakki’];
    $model->foto = CUploadedFile::getInstance($model,’foto’);

    attribut nya harus di masukin dlu, baru bisa di tangkep gan…

  9. p-man says:

    hmm, tetep ga bisa gan..,errornya tetep gitu

    Fatal error: Call to a member function saveAs() on a non-object in D:\xampp\htdocs\lazis\protected\controllers\MuzakkiController.php on line 116

  10. sabitzhabit says:

    hmmm, kenapa ya..
    coba agan taro
    $model->attributes=$_POST[‘Muzakki’];
    tepat di bawah
    if(isset($_POST[‘Muzakki’])){

    kalo error lagi apa pesen error ny gan..

  11. p-man says:

    hmmm, update berhasil gan,🙂 thanks..

    tapi sekarang maslah lagi nih gan,, kalo foto ndak d update sekrang keluar error gitu lagi gan,,
    padahal d modelnya udah d keluarin dari required, n udah d kasih allowEmpty=true ., tapi kok masih harus ttep update ya gan??., kalo gak di isi fileFieldnya , error nya sama gitu juga gan

    Fatal error: Call to a member function saveAs() on a non-object in D:\xampp\htdocs\lazis\protected\controllers\MuzakkiController.php on line 116

  12. sabitzhabit says:

    oh, pasti kayak gitu emang gan. Cz fungsi saveAs() nya terlanjur udah jalan dan dia harus nerima inputan file. Untuk ngatasi itu agan atur biar file nya ga required gan, uda ane post juga gan disini. Liat aja di menu sebelah kanan blog ane ada yg judul nya “upload file not required”.
    Ntar agan ikutin aja langkah2 nya gan..

  13. p-man says:

    itu actionCreate ya gan d posting itu contohnya,,
    tapi untuk update sama juga gitu gan?,

  14. p-man says:

    trus nanti unlinknya gimana ya gan??.,
    kalo d taruh d controller ane yg d atas itu gimana ya gan??.
    kok udah d oprek2 masih bingung ane, alurnya gini kan gan, kalo pas fileFieldnya kosong gak d update, tapi kalo ada isinya baru d update, gitu ya gan??.,
    ato gimana ya??.,

  15. sabitzhabit says:

    controller update yg agan buat sebelumnya ga usah di ubah2 gan. Yg perlu agan rubah adalah :
    if(strlen(trim(CUploadedFile::getInstance($model,’foto’))) > 0)
    {
    $model->foto = CUploadedFile::getInstance($model,’foto’)
    }

    ini untuk ngeliat dlu, apakah agan upload file apa nggak. Kalo nggak dia nggak akan masukin nilai nya.

    dan yang ini :

    if(strlen(trim($model->foto)) > 0)
    {
    $model->foto->saveAs(Yii::app()->basePath . ‘/../images/foto/’ . $model->id_muzzaki . ‘.jpg’)
    }

    ini untuk ngecek apakah file ada file yang di upload. Kalo ga ada dia ga akan nglakuin “saveAs()” nya gan..

  16. p-man says:

    ok gan makasih banyak gan..

    maaf ane banyak tanya nih gan, tapi jujur seneg bgt bisa nemu blog ini gan, membantu sangat.🙂
    makasih makasih

  17. sabitzhabit says:

    sama-sama gan… senang bisa membantu…😀

  18. p-man says:

    gan mau tanya lagi nih..

    maksudnya ini apa ya??.,
    array(‘foto’, ‘safe’),
    d dalam model ada ginian..

    ane pinginnya pas update , passwordnya juga ndak harus update, apa sama kayak yg update foto juga…
    wahhh, banyak masalah muncul satu2 nih gan.,.,😦
    maaf gan kalo ganggu..

  19. sabitzhabit says:

    wah jujur aja ane juga masih bingung gan dg konsep “safe” itu. Btw, mksd ny password ny update gmana gan?

  20. p-man says:

    hmmm,.,
    kan ada tabel user nih umpamanya, nah kan d situ ada tabel password, nah ntar kan kalo pingin update data kan udah bisa, tapi pinginnya passwordnya ndak ikut d update, kan ane pake password compare, jadi ada 2 field
    field pertama itu untuk input password
    field kedua untuk cek password, apa password yg d atas cocok sama password yg field kedua
    (untuk confirm password)

    nah itu pas kita update, pinginnya ndak d update gitu gimana, jadi d field yang kedua itu udah nampil password yg sebelumnya.. itu gimana gan??.,

    • p-man says:

      ok gan makasih banyak atas bantuannya😀
      makasih banyak, sekali lagi makasih banyak😀

      kalo ada problem lagi , boleh minta tolong lagi kan ?🙂

  21. p-man says:

    ok gan makasih banyak atas bantuannya
    makasih banyak, sekali lagi makasih banyak

    kalo ada problem lagi , boleh minta tolong lagi kan ?

  22. sabitzhabit says:

    oke gan… kalo ane bisa, ane bantuin gan..

  23. p-man says:

    ok gan, makasih banyak..

    gan ngomong2 ada ym ga?., jadi biar tambah gampang konsultasinya..,
    thanks gan..

  24. dewa says:

    mas sabit!
    saya ikutin cara di atas tapi kok keluar error
    unlink(C:\xampp\htdocs\terakhir\upload): Permission denied
    terus caranya gimana mas ngasih permissionnya??

  25. Dziks says:

    It works for “actionDelete” Thanks bro…!

  26. anton says:

    maaaf mas sabit itu kl di delete gambarnya …

    di folder /images/ ikut bisa kedeleta gimana ya caranya??

    makasi soalnya saya coba gak kedelete di foldernya

  27. anggajunior says:

    mas kenapa ane pake ini
    unlink(Yii::getPathOfAlias(‘webroot’).’/avatar/’.$model->dosen_nip.’.jpg’);

    error nya gini ya?
    unlink(D:/My Master/xampp/htdocs/skripsi/avatar/123456789.jpg) [function.unlink]: No such file or directory

    folder avatar ane ada diluar protected..

    ini fungsi nya?
    public function actionProfils(){
    $id = Yii::app()->user->id;
    $model = DataDosen::model()->findByAttributes(array(
    ‘login_id’=>$id,
    ));

    if(isset($_POST[‘DataDosen’]))
    {
    unlink(Yii::getPathOfAlias(‘webroot’).’/avatar/’.$model->dosen_nip.’.jpg’);
    $model->attributes=$_POST[‘DataDosen’];
    $model->dosen_foto=CUploadedFile::getInstance($model,’dosen_foto’.’.jpg’);
    if($model->save()){
    $model->DataDosen->saveAs(Yii::app()->basePath.’/avatar/’ . $model->dosen_nip.’.jpg’);
    $this->redirect(array(‘dataDosen/profil’));
    }
    }

    $this->render(‘profils’,array(
    ‘model’=>$model,
    ));

    }

    ttp masih error😦 No such file or directory
    makasih mas😀

  28. plekocot says:

    Script anda saya rubah menjadi seperti ini:

    $model=$this->findModel($id);
    if(Yii::$app->request->get(‘id_berita’))
    {
    unlink(Yii::$app->request->baseUrl.’/img_berita/’.$model->id_berita.$model->gambar);

    $this->findModel($id)->delete();
    return $this->redirect([‘index’]);
    }
    else{

    throw new NotFoundHttpException(‘Invalid request. Please do not repeat this request again.’);
    }

    Tapi hasilnya :

    No such file or directory juga

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: