Selasa, 26 Juli 2016

Menggunakan UUID (Universally Unique Identifier) di PHP / Laravel

Asalammualaikum saya menambahkan 1 buah meteri di blog saya yaitu cara Menggunakan UUID (Universally Unique Identifier) di PHP / Laravel berikut materinya..

Menggunakan UUID (Universally Unique Identifier) di PHP / Laravel

Problem 1: Tebak-Tebak Berhadiah

Selama ini, kita sering menggunakan Auto-Increment Integer sebagai Primary Key dalam tabel-tabel database kita. Kemudian biasanya dalam aplikasi web, kita mengakses data tersebut dengan alamat URL seperti ini:
http://myapplication.com/user?id=105
http://myapplication.com/user/105
Pengguna aplikasi kita bisa mengenali dengan mudah URL tersebut, dimana User ID kita adalah 105. Suatu saat pengguna tersebut iseng-iseng mengakses URL dan mengganti User ID misal 104, atau 106. Sehingga User bisa mengetahui siapa User yang mendaftar sebelum dan sesudah dirinya, padahal bisa jadi itu tidak diperbolehkan. Atau, pengguna menggunakan User ID = 1, yang mana biasanya User ID 1 itu adalah User Administrator, tentu ini berbahaya.
Atau bisa saja ada orang iseng, hacker, yang penasaran, lalu membuat sebuah program untuk mendapatkan data-data semua User, hanya dengan perintah sederhana, sebagai contoh:
for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
Dengan script sederhana, Hacker ini bisa mendapatkan semua data-data User hanya dalam waktu singkat saja.

Problem 2: Primary Key Conflict dan Scalabillity

Ceritanya, kita telah berhasil membuat sebuah aplikasi besar, dan digunakan di satu tempat. Data-datanya sudah ribuan. Kemudian ada permintaan untuk memasang aplikasi tersebut di tempat lain juga, sehingga nantinya akan ada 2 server aplikasi, atau bahkan lebih.
Data-data aplikasi di Server #1 sudah menggunakan Primary Key ID katakanlah 1 s/d 1.000.000. Aplikasi di Server #2, karena baru, tentu saja akan menggunakan Primary Key ID dari 0 lagi, dan auto-increment juga. Sampai saat ini tentu tidak ada masalah, karena 2 aplikasi tersebut berjalan sendiri-sendiri.
Di kemudian hari, ada permintaan untuk menggabungkannya jadi 1 tempat, karena alasan agar lebih mudah dikelola dan distribusi terpusat. Pertanyaannya, lalu bagaimana menggabungkannya? Apakah sekedar copy dan paste bisa? Jawabannya tentu tidak bisa, karena pasti akan ada data bentrok/konflik di keduanya, disebabkan Primary Key ID banyak yang sama. Padahal sebuah Primary Key harus unique.
Dalam kasus lain, aplikasi yang memiliki jumlah transaksi yang sangat banyak, masif, dan cepat, misal dalam 1 detik ada 1000 transaksi/insert data baru, fungsi auto-increment ini akan tidak berfungsi dengan baik. Namun jika insert masih sebatas 1-2 menit sekali, hal ini belum jadi masalah.

Solusi: Apa itu UUID (Universally Unique Identifier) ?


Maksud dari UUIDs adalah untuk memungkinkan sistem terdistribusi untuk secara unik mengidentifikasi informasi tanpa koordinasi pusat signifikan.Gampangnya, UUID adalah kumpulan 32 karakter (String) yang dibuat secara acak (random) dengan teknik khusus yang dijamin unik untuk setiap data. Dalam waktu 1 detik pun, jika di-generate 1000 UUID, kecil kemungkinan ada UUID yang sama. Sehingga lebih cocok untuk digunakan sebagai Primary Key. Contoh UUID (tanpa strip):
25769c6cd34d4bfeba98e0ee856f3e7a
00b245066523042a3bf4698f30617f0e
0179ec949e72ed4df4e0182965a71073
UUID tersebut tentu saja sulit ditebak oleh pengguna karena tidak mempunyai pola khusus. Jika ada hacker yang ingin menggunakan program looping untuk mendapatkan seluruh data User, maka dia perlu membuat banyak kombinasi 32 karakter tersebut, tentu tidak mudah dan membutuhkan waktu lama.

Library UUID Generator untuk PHP / Laravel

Jika kita search Composer Package di Packagist library yang populer digunakan untuk membuat UUID ini adalah ramsey/uuid / website: RAMSEY/UUID / source: GitHub.
Tambahkan package ini di composer.json dengan perintah:
composer require ramsey/uuid
Kemudian untuk menggunakannya, dapat menggunakan contoh seperti yang ada di dokumentasi library ini:
require 'vendor/autoload.php';
 
use Ramsey\Uuid\Uuid;
 
// Generate a version 1 (time-based) UUID object
$uuid1 = Uuid::uuid1();
echo $uuid1->toString() . "\n"; // e4eaaaf2-d142-11e1-b3e4-080027620cdd
 
// Generate a version 3 (name-based and hashed with MD5) UUID object
$uuid3 = Uuid::uuid3(Uuid::NAMESPACE_DNS, 'php.net');
echo $uuid3->toString() . "\n"; // 11a38b9a-b3da-360f-9353-a5a725514269
 
// Generate a version 4 (random) UUID object
$uuid4 = Uuid::uuid4();
echo $uuid4->toString() . "\n"; // 25769c6c-d34d-4bfe-ba98-e0ee856f3e7a

// Generate a version 5 (name-based and hashed with SHA1) UUID object
$uuid5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'php.net');
echo $uuid5->toString() . "\n"; // c4a760a8-dbcf-5254-a0d9-6a4474bd1b62
UUID yang dibuat ada beberapa jenis versi (versi 1 s/d 5), masing-masing mempunyai kebutuhan sendiri-sendiri. Saya biasanya menggunakan versi 4.

Tipe Data Database

Karena kita menggunakan UUID string sebagai Primary Key, maka tipe data field yang dibuat tidak bisa Integer, namun harus Variable Character (VARCHAR), dengan panjang 32 karakter maksimum. Di Laravel, untuk Migration dan Schema Builder juga harus disesuaikan:
Schema::create('users', function(Blueprint $table) 
{
    $table->string('id', 32)->primary();
});

Eloquent ORM

Agar bisa menggunakan UUID di Model Eloquent ORM, kita harus menonaktifkan terlebih dahulu fitur auto increment, dengan cara:
class User extends Model {

    protected $table = 'users';

    public $incrementing = false;

}
Kemudian kita bisa menggunakan UUID ini pada saat Create/Update data seperti biasanya.
use Ramsey\Uuid\Uuid;

class UserController extends Controller {

    public function store()
    {
        $user           = new User;
        $user->id       = Uuid::uuid4()->getHex(); // toString();
        $user->name     = "Yoga Hanggara";
        $user->save();
    }

    public function update($id)
    {
        $user = User::find($id);
        $user->save();
    }
}

Efek Samping

Salah satu efek samping menggunakan UUID sebagai Primary Key adalah tidak bisa melakukan sorting atau order by ID ini, karena datanya berupa String, bukan Integer seperti biasanya. Untuk kebutuhan ini, kita harus pintar-pintar memanipulasi kolom created_at / updated_at.
Kesulitan lainnya adalah, ID/UUID ini menjadi susah untuk diingat :p


Minggu, 24 Juli 2016

Cara Memodifikasi Default Login Laravel 5.1

Assalamualaikum Selamat pagi Kali ini saya akan Menambahkan satu materi pada Framework Laravel Yaitu Cara Memodifikasi Default Login Laravel 5.1 Untuk para pengguna Framework PHP Laravel Berikut panduan Nya..

Memodifikasi Default Login Laravel 5.1
Artikel ini untuk Laravel 5.1 dan ada baiknya Anda membaca dulu artikel tentang Autentikasi Default Laravel 5.1.
Jika Anda merasa fitur autentikasi bawaan Laravel tidak mencukupi kebutuhan dan berniat membuat autentikasi sendiri, sebaiknya baca dulu artikel ini sampai tuntas. Siapa tahu kebutuhan Anda sebenarnya bisa diakomodir, hanya saja belum tahu caranya.

1. Login Dengan Username

Default login Laravel menggunakan email dan password untuk mengidentifikasi akun. Namun kita bisa dengan mudah mengganti email menjadi username. Caranya seperti di bawah ini:
// 1. tambahkan property $username ke AuthController
class AuthController extends Controller
{
    protected $username = 'username'; // 'username' bisa diganti sesuai kebutuhan
    ...

// 2. ganti field email menjadi username di auth/login.blade.php
// sebelum
<input type="email" name="email" value="">

// sesudah
<input type="username" name="username" value="">

2. Mengganti Redirect Setelah Registrasi

Defaultnya setelah berhasil registrasi akan diredirect ke /home. Untuk mengubah url redirect, tambahkan property $redirectPath ke AuthController dan isi sesuai kebutuhan:
class AuthController extends Controller
{
 $redirectPath = 'dashboard/profile';

3. Mengganti Redirect Setelah Login

Jika halaman yang dituju setelah login sama dengan halaman yang dituju setelah registrasi, maka kita tidak perlu melakukan apa-apa. Tapi jika berbeda, misalnya setelah login diredirect ke dashboard/welcome, maka kita harus tambahkan fungsi berikut ini ke AuthController:
public function authenticated($request, $user)
{
 // Fungsi ini akan dipanggil setelah user berhasil login.
 // Kita bisa menambahkan aksi-aksi lainnya, misalnya mencatat waktu last_login user.
 return redirect('dashboard/welcome');
}

4. Menambahkan Pengecekan Status User

Seringkali tabel user memiliki kolom status yang isinya active, blocked atau pending. Lalu hanya user yang statusnya active yang boleh login. Login default Laravel tidak melakukan pengecekan seperti ini. Untuk itu kita harus memodifikasi lagi AuthController dengan menambahkan fungsi seperti ini:
// Fungsi getCredentials ini aslinya ada di Illuminate\Foundation\Auth\AuthenticatesUsers.
// Yang dilakukan disini adalah meng-override fungsi tersebut dan menambahkan kolom status dalam pengecekan.
protected function getCredentials(Request $request)
{
 // aslinya
 // return $request->only($this->loginUsername(), 'password');
  
 // dimodifikasi jadi seperti ini
 return $request->only($this->loginUsername(), 'password') + ['status' => 'active'];
}

5. Otomatis Logout Jika Browser Ditutup

Buka file config/sessions.php, cari baris berikut dan ubah nilainya menjadi true:
'expire_on_close' => false,

 

Kamis, 21 Juli 2016

Manfaat Memilih Belajar Laravel

Selamat Siang Netizen di Tulisan ini akan merangkum hikmah yang di dapatkan ketika Kalian mempelajari framework laravel, kedepannya akan ditambah lagi jika ada pelajaran lain yang Kalian peroleh ok,simak Baik Baik yah..

Composer

Composer itu package manager untuk PHP. Kalau dulu ada PEAR. Saya baru faham pakai composer setelah belajar Laravel, ternyata gampang banget kalau butuh fitur baru untuk aplikasi yang sedang dibuat.
Sebelum saya bikin sendiri logika untuk fitur tersebut, saya cek dulu di packagist. Kalau misal sudah pernah ada yang bikin, saya tinggal tambah di composer.json. Lakukan composer update, dan file tersebut terdownload. Keren!

Readable Code

Kalau dulu, saya coding tuh tidak terlalu memperhatikan ini. Kalau coding tuh biasa aja, tidak terlalu memperhatikan apakah syntax yang kita buat bisa dibaca orang lain atau tidak. Tapi, setelah melihat contoh syntax Laravel, contohnya syntax untuk Eloquent ORM yang seperti ini..
Project::where('title', '=', 'Projek Bandung');
saya kagum dengan syntaxnya yang gampang banget buat dibaca. Semenjak itulah, saya selalu memperhatikan readability dari syntax yang saya tulis.

MVC

Sebenarnya saya pernah belajar konsep MVC waktu kuliah, tapi kurang begitu mengerti. Ketika mempelajari konsep view di Laravel, saya perhatikan kenapa blade memaksakan {{ }} untuk menampilkan variable. Padahal di file blade itu, saya bisa menggunakan <?php ?> kemudian membuat variable atau mengubah-ubah nilai variable tersebut di View.
Barulah saya sadar. Lha, ini kan view, fungsinya pasti cuman buat nampilin data, kalau mau diproses dulu, proses di model atau di controller. Mulailah saya lebih faham dengan konsep MVC.

Testing

Saya kenal testing di PHP tuh, waktu belajar framework CI. Tapi, ngga pernah diaplikasikan. Maklum, ngga sempet.. hehehe..
Ketika di Laravel, saya pelajari lagi konsep testing ini, khususnya saya baca buku Laravel Testing Decoded karya om Jeffrey Way. Saya pelajari tuh mulai dari Unit Test hingga Integration Test. Setelah baca buku ini, saya baru sadar ternyataaaaaaa testing itu penting banget. Apalagi kalau mau bikin aplikasi yang besar.
Bayangkan, kalau aplikasi kita sudah besar dan banyak sekali komponennya. Tanpa testing, setelah menambah fitur baru, pasti kita harus cek semua fitur yang telah ada sebelumnya SECARA MANUAL dan itu ngerepotin banget.

Bikin Dokumentasi

Kalau saya perhatikan dokumentasi laravel, contohnya di file app/routes.php komentar di dokumentasinya itu nyaman buat dibaca. Dari situlah, saya makin paham bahwa sebuah program yang baik, dokumentasinya juga harus mudah dipahami.

Database Revision

Konsep revisi database telah saya pelajari sebelumnya di framework Yii. Tapi di Laravel, dengan syntaxnya yang mudah dibaca, saya jadi semakin paham dengan revisi database.

Deployment

Fortrabbit. Saya belajar deployment pake git di server fortrabbit.

REST

Ini saya pelajari kita mempelajari controller dan model. Barulah saya faham, apa itu REST.

Interface

Fitur OOP ini sudah saya kenal dari dulu, cuman ngga ngerti kapan harus mengimplementasikannya. Di Laravel, karena ada dependency injection, saya makin paham kapan dan dimana harus pakai Interface.
Contoh sederhanya, dengan interface dan dependency injeciton kita dapat merubah sumber data dari MySQL ke MongoDb tanpa harus merubah satu barispun syntax di controller.

Design Pattern

Ini yang paling saya demen. Di Laravel, saya belajar beberapa Design Pattern dan mengimplementasikannya langsung, kalau dulu di Yii saya ngga sempet pelajari yang seperti ini. Baru ngerti sekarang, karena ‘dipaksa’ harus ngerti. Diantaranya:
  • Dependency Injection/Inversion
  • Facade
  • Factory Pattern
  •  SRP (Single Responsibility Principle)
  • DRY (Don’t Repeat Yourself)
  • Open Closed Principle 
Dari Beberapa Manfaat Yang terdapat pada Pnjelasan di atas Semoga Dapat Bermanfaat untuk Para Netizen Sekalian

Rabu, 20 Juli 2016

Sejarah Laravel

Sejarah framework Laravel dibuat oleh Taylor Otwell, proyek Laravel dimulai pada April 2011. Awal mula proyek ini dibuat, karena Otwell sendiri tidak menemukan framework yang up-to-date dengan versi PHP. mengembangkan framework yang sudah ada juga bukan merupakan ide yang bagus, karena keterbatasan sumber daya. Dikarenakan beberapa keterbatasan tersebut, Otwell membuat sendiri framework dengan nama Laravel. Olehkarena itu, Laravel mensyaratkan PHP versi 5.3 ke atas.

  • Keadaan Framework PHP sebelum Laravel 4 di buat
    Pada Agustus 2009, PHP 5.3 resmi dirilis. Dalam rilis tersebut, PHP 5.3 sudah support dengan object oriented yang lebih baik. Framework yang support dengan PHP versi 5.3 adalah Symfony, Zend, Kohana, Lithium dan CodeIgniter.
    CodeIgniter mungkin framework PHP yang paling terkenal pada saat itu. Developer framework PHP menyukainya karena dokumentasi dari berbagai forum yang banyak dan source code yang sederhana. Setiap programmer PHP dengan cepat bisa mulai membuat aplikasi dengan framework tersebut karena komunitasnya besar dan dukungan besar dari penciptanya.
    Namun pada tahun 2011, CodeIgniter memiliki kekurangan seperti yang diungkapkan oleh Taylor Otwell, Creator Laravel menyebutkan ada beberapa fitur fungsional yang menting yang tidak support, seperti kotak autentikasi dan routing. Oleh karena itu, Laravel versi beta 1 dirilis pada tanggal 9 Juni 2011 untuk mengisi fungsi yang hilang. Menurut pencipta Laravel itu (Taylor Otwell), Laravel versi 1 dirilis pada Juni 2011 hanya untuk menambah kekurangan yang ada didalam framework CodeIgniter PHP.
  • Release Laravel 1
    Dimulai dengan rilis pertama, fitur Laravel dibangun dengan Autentikasi, Eloquent ORM (Object Relational Mapping) untuk operasi database, localization, model dan relationship, mekanisme routing yang sederhana, caching, session, views, module dan library, HTML, dsb. Bahkan pada rilis pertama, Laravel sudah memiliki beberapa fungsi mengesankan.
    pada saat itu Laravel versi ini belum berbasis MVC (Model View Controller), tetapi developer menyukai karena sintaks yang friendly dan potensi framework baru ini yang begitu menjanjikan. Dalam bulan-bulan berikutnya, taylor menambahkan method validasi, pagination, paket comand line installer, ekspansi Eloquent ORM (Object Relational Mapping), dan termasuk beberapa ratus unit testing untuk komponen framework. Laravel versi 1 ke versi berikutnya dalam kurun waktu kurang dari enam bulan.
  • Release Laravel 2
    Laravel versi 2 dirilis ke developer pada 24 November 2011, upgrade beberapa fitur diantaranya dukungan controller, engine template dan pengunaan invers. Dengan penambahan fitur controller ini, maka Laravel versi 2 ini sudah resmi menjadi framework yang berbasis MVC. Kurang dari dua bulan kemudian resmi Laravel 3 dirilis.
  • Release Laravel 3
    Pada 22 Februari 2012, Laravel 3 dirilis, memfokuskan pada unit test integration, artisan command line interface, database migration, session driver dan database driver.
    Forum Laavel terus menerus menerangi pengguna framework ini. Laravel 3 dirilis secara stabil untuk beberapa waktu. Sekitar 5 bulan setelah dirilis, creator Laravel memutuskan untuk menulis ulang framework dari awal sebagai satu set paket yang didistribusikan melalui composer. Kemudian barulah dirilis Laravel 4, upgrade signifikan yang menampilkan arsitektur yang berbeda dari inti framework.
  • Release Laravel 4
    Tampaknya ada versi terbaru dari Laravel setiap beberapa bulan. Laravel 4 secara resmi dirilis satu tahun dan 3 bulan setelah rilis versi 3 tepat pada tanggal 28 mei 2013. Beberapa developer menyebutnya “terlalu cepat” update dari versi satu ke versi yang lain, karena mereka harus bermigrasi ke versi baru dan kadang-kadang itu hanya tidak mungkin dengan aplikasi besar yang sudah dibangun pada arsitektur sebelumnya. Masyarakat meminta untuk lebih stabil, beberapa fitur baru dan unit testing yang lebih baik dari komponen Laravel itu.
    laravel 4 ditulis ulang dari bawah ke atas sebagai kumpulan komponen (atau paket) yang ter-integrasi dengan satu sama lain untuk membuat framework yang stabil. Pengelolaan komponen ini dilakukan melalui “Composer” yang disebut sebagai PHP dependency manager. laravel 4 memiliki fitur yang ada di versi lain atau bahkan framework yang telah ada sebelumnya, seperti database seeding, message queues, built-in mailer, fitur Eloquent ORM, soft delete, dan bahkan lebih dari itu.
    berbeda denagn versi sebelumnya, Laravel 4 ini akan ada jadwal rilis secara teratur setiap 6 bulan untuk update (patch dan perbaikan bug). Dengan unit test yang meliputi 100% dari fungsi framework tersebut, Laravel 4 ini akan menjanjikan untuk menjadi stabil dan mudah di update secara online melalui composer.
Berdasarkan dari beberapa keterangan sejarah Laravel tersebut, berikut kami tunjukan dalam bentuk tabel beberapa perbandingan versi Laravel dari versi 1 sampai dengan versi 4
Fitur Laravel 1 Laravel 2 Laravel 3 Laravel 4
Auth Y Y Y Y
Cache Y Y Y Y
Eloquent Y Y Y Y
DB Connectors Y Y Y Y
MySQL Y Y Y Y
PostgreSQL Y Y Y Y
SQLite Y Y Y Y
SQL Server

Y Y
Migrations

Y Y
IoC container
Y Y Y
Config Y Y Y Y
Form helpers Y Y Y Y
HTML helpers Y Y Y Y
URL helpers Y Y Y Y
Routing Y Y Y Y
Controllers
Y Y Y
Model Y Y Y Y
Views Y Y Y Y
Relationship between models
Y Y Y
Redirects Y Y Y Y
Response Y Y Y Y
String helpers Y Y Y Y
Validation
Y Y Y
Unit tests

Y Y
Blade templating engine

Y Y
DB seeding


Y
Queues


Y
Mail


Y
Facades


Y
Command line interface (CLI)

Y Y


Senin, 20 Juni 2016

Materi Mengenai Laravel

 Asalamualaikum wr.wb selamat Pagi Dimananpun Anda berada Kali ini saya menambahkan1 buah materi Lagi di blogsaya ini Langsung saja Pada Hari ini Saya Membahas Materi Tentang Laravel.

Laravel adalah framework PHP dengan kode terbuka (open source) dengan desain MVC (Model-View-Controller) yang digunakan untuk membangun aplikasi website. Framework ini pertama kali dibangun oleh Taylor Otwell pada tanggal 22 Pebruari 2012.
Keunggulan Laravel daripada framework lain antara lain:
– Coding yang simple
– Tersedia generator yang canggih dan memudahkan, Artisan CLI
– Fitur Schema Builder untuk berbagai database,
– Fitur Migration & Seeding untuk berbagai database,
– Fitur Query Builder yang keren,
– Eloquent ORM yang luar biasa,
– Fitur pembuatan package dan bundle,

Laravel untuk pertama kali dikembangkan sendiri oleh Taylor Otwell. Namun, sampai versi ke-4 sekarang, framework opensource ini dikembangkan bersama oleh komunitas dengan tokoh-tokoh penting selain Otwell adalah Dayle Rees, Shawn McCool (pembaca Nettuts pasti hafal orang ini), Jeffrey Way, Jason Lewis, Ben Corlett, Franz Liedke, Dries Vints, Mior Muhammad Zaki dan Phil Sturgeon. Mereka adalah kontributor sejumlah framework dan library PHP yang luar biasa.
 Ingin Lebih Lengkap?
 silakan Anda  buka official webnya di http://laravel.com Atau pantau web ini untuk tutorial selengkapnya.
Cukup sekian Asalamualaikum wr.wb