Yii Framework Forum: membedakan rules form update dengan create - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

membedakan rules form update dengan create Rate Topic: -----

#1 User is offline   rangga 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 24-April 12

Posted 26 April 2012 - 05:16 AM

hola mastah2..mau nanya..kan setelah generate crud pake gii kita punya form update dan create..di form create saya menambahkan attribute image dengan input type fileField..nah klo di form create kan harus diisi tuh gambar nya apa..tapi ketika kita masuk ke form update kan pasti isi dari filefield itu kosong kan..nah jika kita tidak ingin mengganti gambar maka kita tidak perlu upload file nya lagi sehingga apabila saya klik save pasti akan ada pesan kesalahan bahwa gambar tidak boleh kosong.

Jadi intinya bagaimana agar di form update tidak harus mengisi gambar yang akan diupload sedangkan di form create harus memilih gambar..
0

#2 User is offline   rootbear 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 222
  • Joined: 17-June 11

Posted 26 April 2012 - 06:54 AM

view

<?php $form = $this->beginWidget('CActiveForm', array(
	'id' => 'picture-form',
	'htmlOptions' => array(
		'enctype' => 'multipart/form-data'
	)
));
?>


model: 'allowEmpty'=>true
public function rules() {
	return array(
		array('picture', 'file', 'types'=>'jpg, gif, png', 'allowEmpty'=>true),
		// ...
	);
}

I enjoy the Yii.sy coding life here.
0

#3 User is offline   rangga 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 24-April 12

Posted 26 April 2012 - 09:04 PM

makasi rootbeer atas respon nya..saya sudah mencoba solusi nya..tapi permasalahan nya adalah di form update,,apabila saya tidak ingin merubah attribut filefield tersebut maka isi dari filefield tersebut menjadi kosong..

inti dari pertanyaan saya adalah bagaimana cara supaya apabila saya tidak ingin mengganti gambar di form update, maka ketika di klik save, gambar yang ada di filefield tidak berubah menjadi kosong
0

#4 User is offline   mhdrasad 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 199
  • Joined: 20-April 11
  • Location:Bumi Indonesia

Posted 30 April 2012 - 09:30 PM

emang yang agan script updatenya seperti apa?.
Wait For True Concept or Finish it With Coding Concept .
#chadnox
0

#5 User is offline   risdo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 05-March 12
  • Location:jakarta

Posted 30 April 2012 - 11:38 PM

Wah saya jg lg mempunyai masalah yang sama nie...

ikut mantau jg dah... :)
0

#6 User is offline   kfahmi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 81
  • Joined: 19-March 12

Posted 01 May 2012 - 09:52 PM

View Postrisdo, on 30 April 2012 - 11:38 PM, said:

Wah saya jg lg mempunyai masalah yang sama nie...

ikut mantau jg dah... :)



wah saya memantau dr kmren blm solved yah,, maaf nih dr kmren mau kasih tau tp nunggu master2. berhubung blm ada yang kasih masukan..

saya coba kasih masukan mungkin gak terbaik,


actionUpdate di controller
public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
                $this->performAjaxValidation($model);
             
                    if(isset($_POST['Item']))
                    {
			
			if(isset($_POST['Item']['img']))
                        {
                            $model->attributes=$_POST['Item'];
                            $sss;
                            if(strlen(trim(CUploadedFile::getInstance($model,'img'))) > 0)
                            {
                                    $sss=CUploadedFile::getInstance($model,'img');
                                    $model->img=$model->brand.'.'.$sss->extensionName;
                            }
			
                        
                            if($model->save())
                            {
                                   if(strlen(trim($model->img)) > 0)
                                    {			
                                        
                                            $sss->saveAs(Yii::app()->basePath . '/../images/item/'.$model->img);
                                    }

                                    $this->redirect(array('view','id'=>$model->id_item));
                            }
                        }
                        else
                        {
                            $model->attributes=$_POST['Item'];
                            if($model->save())
                            {
                                    $this->redirect(array('view','id'=>$model->id_item));
                            }
                        }
                            
                    }
             
              
		$this->render('update',array(
			'model'=>$model,));
	}
        


Rules di Model, field img di allow empty (kalo mau bisa update atau create tanpa image di bolehin ya)
public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('id_type, brand, desc, price, qty, status', 'required'),
			array('id_type, price, qty, status', 'numerical', 'integerOnly'=>true),
			array('brand', 'length', 'max'=>255),
			array('img', 'file','allowEmpty' => true, 'types'=>'jpg, gif, png'),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('id_item, id_type, brand, desc, price, qty, status', 'safe', 'on'=>'search'),
		);
	}


nah terus kalo mau ganti Gambar ane pake algorith ane sendiri jadi ane buat fungsi 1 lagi, yaitu actionDeleteImg yang ane taro di controller, dan di view nya ane buat button nya untuk jalanin fungsi nya.

ini _form nya
<!--FORM jika suatu DATA ada imagenya akan ditampilkan ini -->
<div class="row">
    
    <?php
    if(!empty($model->img))
    {
        echo CHtml::link('Change image',array('deleteImg', 'id'=>$model->id_item));//inibuttonnya
            
        $this->widget('zii.widgets.CDetailView',
        array(
	'data'=>$model,
	'attributes'=>
        array(
		array( 
                'label'=>'Current Image',
                'type'=>'raw',
                'value'=>html_entity_decode(CHtml::image(Yii::app()->baseUrl . '/images/item/'.$model->img,'alt',array('width'=>'300'))),

                ),
	),
        ));  
    }
else
{
?>
<div class="row">
		<?php echo $form->labelEx($model,'img'); ?>
		<?php echo $form->fileField($model,'img'); ?>
		<?php echo $form->error($model,'img'); ?>
	</div>
<?php
}
?>
    ?>		
</div>



ini fungsi di controller untuk delete dan unlink imagenya
public function actionDeleteImg($id)
	{
			$model=$this->loadModel($id);
                        if(!empty($model->img))
                        {
                            unlink(Yii::app()->basePath . '/../images/item/'.$model->img);

                            $model->img ='';
                            if($model->save(false))
                            {
                            $this->redirect(array('update','id'=>$model->id_item));
                            }
                        }
                        else
                        {
                            $this->redirect(array('update','id'=>$model->id_item));
                        }
                            
                        
	}
?>

0

#7 User is offline   ronyaja 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 12
  • Joined: 02-March 12

Posted 02 May 2012 - 06:31 AM

Coba tambahan rule baru gan,
public function rules
{
  return array(
    ...........,
    array('attributeYgHarusDiIsiSmuaAction/kecualiAttributeImage','required'),
    array('image','required','on'=>'create'),
  );
}


Terus kalo ada masalah pas action create attribute image tetap bukan required, tambahkan kode ini di function create pada controller,
class ClassName extends Controller
{
  ........
  public function actionCreate()
  {
    $model=new Image;
    //Untuk set scenario yg dibutuhkan Validator, kalo nggak default scenarionya 'insert'
    $model->setScenario('create'); 
  }
}

0

#8 User is offline   andromeda 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 02-April 12

Posted 06 June 2012 - 11:30 PM

sebenernya pakai "if" pada form gambarnya kan bisa.. sesuai kondisi saat add and update
0

#9 User is offline   mhdrasad 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 199
  • Joined: 20-April 11
  • Location:Bumi Indonesia

Posted 15 June 2012 - 02:30 AM

ane setuju sama master di atas , ane juga cuma modal if doank :D
if(isset($_POST['FileUploadForm'])){
//baris eksekusi klo ada file yang di upload
}
$this->redirect(array("upload")); // ini buat balik lagi klo filenya gak ada

Wait For True Concept or Finish it With Coding Concept .
#chadnox
0

#10 User is offline   ahmadroni 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 250
  • Joined: 14-June 09
  • Location:Yogyakarta-Indonesia

Posted 15 June 2012 - 08:52 PM

munkin ini bisa jadi refesensi disini, dan disini juga, dan ini juga
Hospital Cost Management System and
Hospital Management Information System
0

#11 User is offline   tyo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 03-July 12

Posted 03 July 2012 - 10:47 AM

maaf gan saya anak baru
saya nemuin masalah sama kaya di atas
teru solusi diatas udah saya ikutin
tapi tetap aja gak bisa
gambarnya tetap hilang jika diupdate dalam keadaan kosong, seharusnya gambarnya tetap ada di database

ada yg bisa ngasih solusi gak ??
plisss :(
0

#12 User is offline   elixer 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 8
  • Joined: 11-July 12
  • Location:Jakarta

Posted 15 July 2012 - 02:14 PM

View Postrangga, on 26 April 2012 - 09:04 PM, said:

makasi rootbeer atas respon nya..saya sudah mencoba solusi nya..tapi permasalahan nya adalah di form update,,apabila saya tidak ingin merubah attribut filefield tersebut maka isi dari filefield tersebut menjadi kosong..

inti dari pertanyaan saya adalah bagaimana cara supaya apabila saya tidak ingin mengganti gambar di form update, maka ketika di klik save, gambar yang ada di filefield tidak berubah menjadi kosong


Mau confirm dulu problemnya:
1. di action create. nama image harus diisi
2. di action update. kalo dikosongin, maka pake data yang sudah di database. kalo diisi, maka upload baru.

kalo bener berarti tinggal pasang variable temporary sebelum attributes di assign terus timpa lagi variablenya kalo kosong.

                $model=$this->loadModel($id);
                if(isset($_POST['Gallery']))
		{
                        $temp = $model->image;
			$model->attributes=$_POST['Gallery'];
                        $model->image = CUploadedFile::getInstance($model,'image');
                        if ($model->image->name == "") $model->image = $temp; //tambahin condition seperti ini
			if($model->save()) {
                                if ($model->image != $temp) $model->image->saveAs(Yii::app()->basePath.'/../../image/'.$model->name); //cek kalo kosong atau filenya sama
				$this->redirect(array('view','id'=>$model->galleryID));
                        }
		}

0

#13 User is offline   muharam 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 15-January 14

Posted 16 January 2014 - 01:07 AM

View Postelixer, on 15 July 2012 - 02:14 PM, said:

Mau confirm dulu problemnya:
1. di action create. nama image harus diisi
2. di action update. kalo dikosongin, maka pake data yang sudah di database. kalo diisi, maka upload baru.

kalo bener berarti tinggal pasang variable temporary sebelum attributes di assign terus timpa lagi variablenya kalo kosong.

                $model=$this->loadModel($id);
                if(isset($_POST['Gallery']))
		{
                        $temp = $model->image;
			$model->attributes=$_POST['Gallery'];
                        $model->image = CUploadedFile::getInstance($model,'image');
                        if ($model->image->name == "") $model->image = $temp; //tambahin condition seperti ini
			if($model->save()) {
                                if ($model->image != $temp) $model->image->saveAs(Yii::app()->basePath.'/../../image/'.$model->name); //cek kalo kosong atau filenya sama
				$this->redirect(array('view','id'=>$model->galleryID));
                        }
		}




View Postelixer, on 15 July 2012 - 02:14 PM, said:

om udh bisa nih pake source code yg itu, tapi, . .
kalo mau update file gambar, gambar sebelumnya harus otomatis ke hapus kan . . . . punya caranya gak? makasih . . .

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users