Menyimpan Gambar ke database pada YII
Langkah pertama siapkan terlebih dahulu database tes dengan tabel siswa seperti berikut:
Field | Jenis | Ukuran/Panjang/Nilai |
nis | int | 4 |
nama | Varchar | 30 |
jenkel | Enum | ‘Laki-laki’ , ‘Perempuan’ |
kelas | Varchar | 10 |
file_name | Char | 30 |
file_type | Char | 15 |
file_content | Mediumblob | |
file_size | Int | 11 |
Kemudian silakan buat model dan crud dari tabel siswa menggunakan GII.
Langkah selanjutnya buka file siswa.php yang ada pada folder model:
tambahkan variabel foto dengan cara ketikan script berikut:
tambahkan variabel foto dengan cara ketikan script berikut:
<?php
/**
* This is the model class for table "siswa".
*
* The followings are the available columns in table 'siswa':
* @property integer $nis
* @property string $nama
* @property string $jenkel
* @property string $kelas
* @property string $file_name
* @property string $file_type
* @property string $file_content
* @property integer $file_size
*/
class Siswa extends CActiveRecord
{
Public $foto;
...
|
Setelah menambahkan variabel foto kita perlu mendeklarasikan rules dari variabel foto tersebut dengan cara, cari script berikut:
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('nis, nama, jenkel, kelas, file_name, file_type, file_content, file_size', 'required'),
array('nis, file_size', 'numerical', 'integerOnly'=>true),
array('nama, file_name', 'length', 'max'=>30),
array('jenkel', 'length', 'max'=>9),
array('kelas', 'length', 'max'=>10),
array('file_type', 'length', 'max'=>15),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('nis, nama, jenkel, kelas, file_name, file_type, file_content, file_size', 'safe', 'on'=>'search'),
);
}
|
Setelah ditemukan silakan tambahkan script berikut dibawah script array('file_type', 'length', 'max'=>15),:
array('foto', 'file', 'types'=>'jpg, gif, png, jpeg','allowEmpty' => true),
|
Selain itu hapus “, file_name, file_type, file_content, file_size”pada rules requiredkarena variabel tersebut nanti bisa dikosongkan tidak harus diisi.
Sekarang tiba pada intinya untuk melakukan penyimpanan gambar ke database kita perlu menambahkan function before save pada model Siswa,functioninidigunakan untuk melakukan konversi dari variabel foto ke dalam variabel file_name, file_type, file_size, file_content. Scriptnya adalah sebagai berikut:
public function beforeSave()
{
if(isset($this->foto))
{
if($file=CUploadedFile::getInstance($this,'foto'))
{
$this->file_name=$file->name;
$this->file_type=$file->type;
$this->file_size=$file->size;
$this->file_content=file_get_contents($file->tempName);
}
}
return parent::beforeSave();
}
|
Kita telah selesai melakukan editing pada model Siswa, selanjutnya kita perlumelakukan editing pada file form.php pada folder view/siswa. Silakan buka filetersebut selanjutnya kita perlu menambahkan text field untuk variabel foto. Silakan cari script ini:
<div class="row">
<?php echo $form->labelEx($model,'file_name'); ?>
<?php echo $form->textField($model,'file_name',array('size'=>30,'maxlength'=>30)); ?>
<?php echo $form->error($model,'file_name'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'file_type'); ?>
<?php echo $form->textField($model,'file_type',array('size'=>15,'maxlength'=>15)); ?>
<?php echo $form->error($model,'file_type'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'file_content'); ?>
<?php echo $form->textField($model,'file_content'); ?>
<?php echo $form->error($model,'file_content'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'file_size'); ?>
<?php echo $form->textField($model,'file_size'); ?>
<?php echo $form->error($model,'file_size'); ?>
</div>
|
hapus script tersebut dan ganti dengan script berikut:
<div class="row">
<?php echo $form->labelEx($model,'foto'); ?>
<?php echo $form->fileField($model,'foto'); ?>
<?php echo $form->error($model,'foto'); ?>
</div>
|
Selanjutnya kita perlu mengedit script berikut:
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'siswa-form',
'enableAjaxValidation'=>false,
));
?>
|
Menjadi:
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'siswa-form',
'enableAjaxValidation'=>false,
'htmlOptions' => array('enctype' => 'multipart/form-data'),
));
?> |
Kita telah berhasil melakukan penyimpanan file gambar kedalam database.
Sekarang pertanyaannya bagaimana cara menampilkannya???
Untuk menampilkan gambar tersebut kita memanfaatkan fungsi base64_encode, silakan buka file siswa.php pada folder model.
Kemudian tambahkan fungsi berikut kedalam class model:
Kemudian tambahkan fungsi berikut kedalam class model:
public function data_uri($file, $mime, $contents) {
$base64 = base64_encode($contents);
return "data:$mime;base64,$base64";
}
|
Setelah itu, misal kita ingin menampilkan foto tersebut pada file view pada folder view/siswa tinggal kita panggil dengan script berikut berikut:
<?php if($model->file_name){ ?>
<img src="<?php echo $model->data_uri("$model->file_name", "$model->file_type","$model->file_content");
?>" alt="fotonya" height=120 width=100>
<?php } ?>
|
Maka kita berhasil menampilkan foto tersebut.
No comments:
Post a Comment