- Seme Framework
- versi 4.0.3 (ID)
- Persyaratan
- Download & Install
- Pengaturan
- Tutorial
- Perutean URI
- Konstanta
- Variabel Global
- Model
- View
- Controller
- Library
- CLI (command line interface)
- Core
Properti Input
Seme Framework memiliki properti untuk menerima atau memproses hasil pengiriman nilai melalui $_POST
, $_GET
, dan $_REQUEST
.
Properti ini berisikan object dari kelas SENE_Input
.
Metode SENE_Input::post()
Metode SENE_Input::post()
akan menerima isi nilai dari tag form
HTML dengan atribut method
berisikan post
dan atribut enctype
berisikan multipart/form-data
.
Berikut ini adalah bentuk umum dari metode SENE_Input::post()
.
SENE_Input::post($keyname, $default_value=0): mixed
Parameter
Metode SENE_Input::post
terdiri atas 2 parameter yaitu $keyname
dan $default_value
.
Parameter $keyname
wajib diisi dan harus sesuai dengan isi dari atribut name
yang ada dalam tag input
, select
, dan komponen form html lainnya.
Sementara parameter $default_value
tidak wajib diisi.
Contoh Kode
Berikut ini adalah contoh potongan kode HTML form.
...
<form method="post" enctype="multipart/form-data">
<input type="text" name="nama" />
<select name="gender">
<option value="1">Pria</option>
<option value="0">Wanita</option>
</select>
</form>
...
Berikut ini adalah contoh kode di Controller Seme Framework.
<?php
class Home extends SENE_Controller{
public function __construct(){
parent::__construct();
}
public function index(){
$nama = $this->input->post('nama'); // disesuaikan dengan tag input untuk atribut name="nama"
$gender = $this->input->post('gender'); // disesuaikan dengan tag select untuk atribut name="gender"
...
}
}
Metode SENE_Input::get()
Metode SENE_Input::get()
akan menerima isi nilai dari tag form
HTML dengan atribut method
berisikan get
.
Metode ini juga akan menerima input GET
, yang dilewatkan melalui alamat URL
.
Berikut ini adalah bentuk umum dari metode SENE_Input::get()
.
SENE_Input::get($keyname, $default_value=0): mixed
Parameter
Metode SENE_Input::get
terdiri atas 2 parameter yaitu $keyname
dan $default_value
.
Parameter $keyname
wajib diisi dan harus sesuai dengan isi dari atribut name
yang ada dalam tag input
, select
, dan komponen form html lainnya.
Sementara parameter $default_value
tidak wajib diisi.
Contoh Kode melalui FORM
Berikut ini adalah contoh potongan kode HTML form.
...
<form method="get">
<input type="text" name="nama" />
<select name="gender">
<option value="1">Pria</option>
<option value="0">Wanita</option>
</select>
</form>
...
Berikut ini adalah contoh kode di Controller Seme Framework.
<?php
class Home extends SENE_Controller{
public function __construct(){
parent::__construct();
}
public function index(){
$nama = $this->input->get('nama'); // disesuaikan dengan tag input untuk atribut name="nama"
$gender = $this->input->get('gender'); // disesuaikan dengan tag select untuk atribut name="gender"
...
}
}
Contoh Kode melalui URL
Berikut ini adalah alamat URL, dengan https://example.com/
sebagai BASE_URL
.
https://example.com/login/proses/?username=RuliWidura1&password=123456
Berikut ini adalah contoh kode di Controller Seme Framework.
<?php
class Login extends SENE_Controller{
public function __construct(){
parent::__construct();
}
...
public function proses(){
$username = $this->input->get('username'); // didapatkan dari parameter URL username
$password = $this->input->get('password'); // didapatkan dari parameter URL password
...
}
}
Metode SENE_Input::request()
Metode SENE_Input::request()
akan menerima isi nilai baik dari metode GET
maupun POST
.
Jadi, metode ini mengizinkan untuk memproses input baik dari proses pengiriman FORM maupun URL.
Berikut ini adalah bentuk umum dari metode SENE_Input::request()
.
SENE_Input::request($keyname, $default_value=0): mixed
Parameter
Metode SENE_Input::request
terdiri atas 2 parameter yaitu $keyname
dan $default_value
.
Parameter $keyname
wajib diisi dan harus sesuai dengan isi dari atribut name
yang ada dalam tag input
, select
, dan komponen form html lainnya.
Sementara parameter $default_value
tidak wajib diisi.
Contoh Kode
Berikut ini adalah contoh potongan kode HTML form.
...
<form action="<?=base_url()?>produk/review/?id=96" method="post" enctype="multipart/form-data">
<input type="text" name="review" />
<select name="like">
<option value="1">Like</option>
<option value="0">Dislike</option>
</select>
</form>
...
Berikut ini adalah contoh kode di Controller Seme Framework.
<?php
class Produk extends SENE_Controller{
public function __construct(){
parent::__construct();
}
...
public function review(){
$id = $this->input->request('id'); // nilai yang dikirim melalui parameter URL / GET
$review = $this->input->get('nama'); // nilai yang dikirim dari atribut name="review" melalui POST
$rating = $this->input->get('gender'); // nilai yang dikirim dari atribut name="gender" melalui POST
...
}
}
Menangani Upload File ($_FILES
)
Untuk menangani $_FILES
Anda harus membuatnya secara manual sesuai dengan kebutuhan aplikasi Anda.
Ngoding untuk penanganan upload FILE
Pertama-tama kita harus membuat metode __uploadImage()
secara private
, supaya tidak bisa diakses langsung melalui rute default Seme Framework.
Berikut ini adalah contoh potongan kode untuk pembuatan metode __uploadImage()
di Controller.
<?php
class Produk extends SENE_Controller{
public function __construct(){
parent::__construct();
}
...
/**
* Method for handling file upload
* Only allowed .png, .jpeg, .jpg, .gif extension
* Max file size 2000000 bytes
* Unsupported WebP encoding image
* @param string $keyname the $_FILES key that send from html
* @param string $id the id of user, product, or uniqid
* @param string $ke sequencer
* @constructor
* @return object result with object, contain status, message, image, and thumb.
*/
private function __uploadImage($keyname, $id, $ke="")
{
$sc = new stdClass();
$sc->status = 500;
$sc->message = 'Error';
$sc->image = '';
$sc->thumb = '';
if (isset($_FILES[$keyname]['name'])) {
if ($_FILES[$keyname]['size']>2000000) {
$sc->status = 301;
$sc->message = 'Ukuran gambar terlalu besar. Silakan pilih dengan ukuran kurang dari 2 MB';
$this->seme_log->write('User::__uploadImagex -- forceClose '.$sc->status.' '.$sc->message);
return $sc;
}
$filenames = pathinfo($_FILES[$keyname]['name']);
if (isset($filenames['extension'])) {
$fileext = strtolower($filenames['extension']);
} else {
$fileext = 'jpg';
}
if (!in_array($fileext, array("jpg","png","jpeg","gif"))) {
$sc->status = 303;
$sc->message = 'Invalid file extension, please try other image file.';
$this->seme_log->write('User::__uploadImagex -- forceClose '.$sc->status.' '.$sc->message);
return $sc;
}
$filename = "$id-$ke";
$filethumb = $filename.'-thumb';
$targetdir = 'media/upload/';
$targetdircheck = realpath(SEMEROOT.$targetdir);
if (empty($targetdircheck)) {
if (PHP_OS == "WINNT") {
if (!is_dir(SEMEROOT.$targetdir)) {
mkdir(SEMEROOT.$targetdir);
}
} else {
if (!is_dir(SEMEROOT.$targetdir)) {
mkdir(SEMEROOT.$targetdir, 0775);
}
}
}
$tahun = date("Y");
$targetdir = $targetdir.DIRECTORY_SEPARATOR.$tahun;
$targetdircheck = realpath(SEMEROOT.$targetdir);
if (empty($targetdircheck)) {
if (PHP_OS == "WINNT") {
if (!is_dir(SEMEROOT.$targetdir)) {
mkdir(SEMEROOT.$targetdir);
}
} else {
if (!is_dir(SEMEROOT.$targetdir)) {
mkdir(SEMEROOT.$targetdir, 0775);
}
}
}
$bulan = date("m");
$targetdir = $targetdir.DIRECTORY_SEPARATOR.$bulan;
$targetdircheck = realpath(SEMEROOT.$targetdir);
if (empty($targetdircheck)) {
if (PHP_OS == "WINNT") {
if (!is_dir(SEMEROOT.$targetdir)) {
mkdir(SEMEROOT.$targetdir);
}
} else {
if (!is_dir(SEMEROOT.$targetdir)) {
mkdir(SEMEROOT.$targetdir, 0775);
}
}
}
$sc->status = 998;
$sc->message = 'Invalid file extension uploaded';
if (in_array($fileext, array("gif", "jpg", "png","jpeg"))) {
$filecheck = SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filename.'.'.$fileext;
if (file_exists($filecheck)) {
unlink($filecheck);
$rand = rand(0, 999);
$filename = "$id-$ke-".$rand;
$filecheck = SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filename.'.'.$fileext;
if (file_exists($filecheck)) {
unlink($filecheck);
$rand = rand(1000, 99999);
$filename = "$id-$ke-".$rand;
}
}
$filethumb = $filename."-thumb.".$fileext;
$filename = $filename.".".$fileext;
move_uploaded_file($_FILES[$keyname]['tmp_name'], SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filename);
if (is_file(SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filename) && file_exists(SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filename)) {
if (@mime_content_type(SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filename) == 'image/webp') {
$sc->status = 302;
$sc->message = 'WebP image format currently unsupported';
$this->seme_log->write('User::__uploadImagex -- forceClose '.$sc->status.' '.$sc->message);
return $sc;
}
$this->lib("wideimage/WideImage", 'wideimage', "inc");
if (file_exists(SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filethumb) && is_file(SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filethumb)) {
unlink(SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filethumb);
}
if (file_exists(SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filename) && is_file(SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filename)) {
WideImage::load(SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filename)->reSize(370)->saveToFile(SEMEROOT.$targetdir.DIRECTORY_SEPARATOR.$filethumb);
$sc->status = 200;
$sc->message = 'Successful';
$sc->thumb = str_replace("//", "/", $targetdir.'/'.$filethumb);
$sc->image = str_replace("'\'", "/", $targetdir.'/'.$filename);
$sc->image = str_replace("//", "/", $targetdir.'/'.$filename);
} else {
$sc->status = 997;
$sc->message = 'Failed: file image not exists';
$this->seme_log->write('User::__uploadImagex -- forceClose '.$sc->status.' '.$sc->message);
}
} else {
$sc->status = 999;
$sc->message = 'Upload file failed';
$this->seme_log->write('User::__uploadImagex -- forceClose '.$sc->status.' '.$sc->message);
}
} else {
$sc->status = 998;
$sc->message = 'Invalid file extension uploaded';
$this->seme_log->write('User::__uploadImagex -- forceClose '.$sc->status.' '.$sc->message);
}
} else {
$sc->status = 988;
$sc->message = 'Keyname file does not exists';
$this->seme_log->write('User::__uploadImagex -- forceClose '.$sc->status.' '.$sc->message);
}
return $sc;
}
...
}
Penggunaan Kode Pustaka (Library)
Berikut ini adalah daftar pustaka yang digunakan oleh potongan kode diatas:
- Library/Seme_Log
- Library/WideImage
- Direktori
media/upload/
dengan hak akseswrite
sehingga web server dapat memindahkan file yang diupload kedalam susunan direktori Seme Framework.
public function __construct(){
parent:: __construct();
$this->lib("seme_log");
}
Cara Penggunaan Kode Penanganan Upload File
Berikut ini adalah contoh penggunaan kode didalam sebuah metode yang ada di kelas Controller.
...
// mengeksekusi metode __uploadImage()
$sc = $this->__uploadImage("foto",$id,"1");
// variabel $sc berisikan objek
// jika tidak berisikan objek, maka proses penanganan upload file gagal
// validasi bahwa $sc ini berisi objek, untuk menghindari ketika validasi error
if(!is_object($sc)) $sc = new stdClass();
// validasi bahwa $sc berisikan objek $status, untuk menghindari ketika validasi error
if(!isset($sc->status)) $sc->status=0;
// validasi bahwa $sc berisikan objek $message, untuk menghindari ketika validasi error
if(!isset($sc->message)) $sc->message='no response from upload processor';
//validasi terakhir error tidaknya
if($sc->status == 200){
//berhasil diupload
....
}else{
//gagal diupload
....
}
...