8 Alasan Laravel Lebih Baik daripada CodeIgniter ~ Blog Indra El Firasy

8 Alasan Laravel Lebih Baik daripada CodeIgniter


Sudah lama rasanya tidak update blog ini. Kali ini saya ingin berbagi tentang kenapa saya beralih meninggalkan CodeIgniter dan menggunakan Laravel. Saya menggunakan CodeIgniter sudah lebih dari dua tahun dan sudah banyak projek yang saya buat dengan menggunakan framework tersebut. Namun, tahun lalu, karena kebutuhan dari client mengharuskan kita untuk menggunakan Laravel, maka terpaksalah saya harus belajar framework tersebut. 

Bagi saya yang sudah mengerti CodeIgniter, ketika mencoba menggunakan Laravel butuh waktu satu minggu untuk membuat satu aplikasi yang memberi output berupa REST API. Itu pun saya butuh satu minggu sendiri untuk belajar Laravel. Tapi waktu yang saya investasikan untuk belajar Laravel tersebut sangat layak, apa lagi untuk hal-hal baru pada Laravel, dalam jangka panjang akan menghemat waktu saat proses development berjalan. Terang saja, untuk membuat aplikasi yang sama, hanya butuh waktu dua hari bagi saya ketika sudah mengerti Laravel.

Panduan kali ini tidak dimaksudkan untuk menjadi sebuah tutorial Laravel tetapi hanya berfungsi untuk memberikan suatu pandangan bagaimana beberapa kode Laravel terlihat dan bekerja. Saya telah melihat banyak blog memuji Laravel lebih dari CodeIgniter tapi belum benar-benar melihat ada yang merangkum kenapa itu lebih baik sebenarnya. Berikut 8 alasan - yang menurut saya tepat - kenapa Laravel lebih baik daripada CodeIgniter.


1. Eloquent ORM

Cara kita membuat model adalah berdasarkan relationship. Cara tersebut akan mengubah pola pikir kita tentang aplikasi dan gambaran aplikasi. Pada CodeIgniter saya menggunakan model dalam bentuk REST format yang secara dasar memiliki fungsi 'post','get','put','delete'. Pada Laravel, Eloquent ORM sudah menyiapkannya untuk kita. Kita cukup menetapkan relationship saja. Pada dasarnya kita akan membuatnya seperti berikut:

class Post extends Eloquent {
    protected $table = 'posts';
 
    public function comments() {
        return $this->hasMany('Comment');
    }
}

Lalu kita akan memanggil model tersebut dengan code berikut:

Post::find($id)->comments()->get();

Laravel juga memiliki satu fitur keamanan yang cukup fantastis yang memungkinkan kita untuk membuat field pada tabel terjaga dari berbagai ancaman yang dibuat atau terlupakan oleh developers. Secara default, Eloquent tidak mengizinkan untuk kita melakukan batch 'post' atau 'update' pada model. Kita harus melakukan sesuatu seperti code berikut:

$user = new User();
$user->first_name = Input::get('first_name');
// dll
$user->save();

Namun, jika kita ingin model melakukan parsing variabel secara otomatis, bisa dengan cara:

class User extends Eloquent implements UserInterface, RemindableInterface {
 
    protected $fillable = array('first_name', 'last_name', 'email');
}

Kita cukup menjalankannya dengan code:

User::find($id)->update(Input::all());

Canggih bukan? Bersih, aman dan elegan. Hal yang menarik bagi saya terhadap Laravel dari pada CodeIgniter adalah ketika kita membuat sebuah objek baru, ia akan mengembalikan objek tersebut dari pada mengembalikan 'id' saja seperti halnya CodeIgniter.

Penjelasan diatas hanya sedikit gambaran peran yang disediakan oleh Eloquent. Formatnya yang bersih membuat Laravel menyenangkan dan lebih mudah bagi saya untuk digunakan. Anda tentu saja dapat melakukan `joins` dan query yang lebih canggih tetapi semua mengikuti gaya sintaksis sederhana.

2. Routing

Routing pada CodeIgniter mungkin sangat primitif sekali jika dibandingkan dengan Laravel. Pada CI, file Routing berguna ketika kita butuh redirection atau overwrites menggunakan '(:any)' dan '(:num)'. Hal tersebut sebenarnya bermanfaat tetapi butuh waktu yang banyak jika ingin membuat hal tersebut berjalan baik. Laravel memangkas itu semua. Bentuk dasar route pada Laravel adalah seperti code berikut dimana sekedar memanggil controller saja.

Route::controller('posts', 'PostController');

Kita dapat menambahkan fungsi pada Route di Laravel. Bahkan kita bisa menggunakan file Route saja tanpa harus ada Controller untuk menangani sebuah request.

Route::get('logout', function() {
    if (Auth::check()) {
        Auth::logout();
        return Redirect::to(Config::get('app.url.www') . '/');
    }
    else {
        return Response::view(
            'layouts.master',
            array('view' => 'errors.404')
        , 404);
    }
});

Kita juga dapat menyaring URLs dengan regular expression dan mengarahkannya ke halaman 404 jika tidak valid.

Route::get('logout', function() {
    if (Auth::check()) {
        Auth::logout();
        return Redirect::to(Config::get('app.url.www') . '/');
    }
    else {
        return Response::view(
            'layouts.master',
            array('view' => 'errors.404')
        , 404);
    }
});

Kelebihan dari Laravel lagi adalah kita dapat membuat filters secara terpisah dan memasangnya pada route lainnya. Ini sangat berguna ketika aplikasi kita butuh sistem authentication seperti admin.

Route::filter('auth', function() {
    if (Auth::guest()) {
        return Redirect::to('login')
                       ->with('error', 'You must be logged in.');
    }
});
 
Route::when('profile', 'auth');
Route::when('profile/*', 'auth');

Penjelasan di atas merupakan gambaran sederhana dari kegunaan route dan filter pada Laravel. Kita dapat melihat keseluruhan aplikasi kita dengan melakukan kontrol terhadap logic dan flow pada filters dan route tersebut.

3. REST

Pada Codeigniter kita harus menentukan sendiri setiap function CRUD yang ada pada controller jika ingin membuat REST aplikasi. Ada juga yang menyediakan generator untuk mempermudah proses tersebut, akan tetapi function tersebut harus ditentukan route map nya sendiri. Laravel cukup menggunakan satu commend pada file 'route.php' untuk proses tersebut.

Route::resource('posts', 'PostsController');

Code tersebut secara otomatis akan memetakan ketujuh function yang ada pada controller:

class PostsController extends \BaseController {
 
    public function index() {
        // Display a listing of the resource.
    }
 
    public function create() {
        // Show the form for creating a new resource.
    }
 
    public function store() {
        // (POST) Store a newly created resource in storage.
    }
 
    public function show($id) {
        // (GET) Display the specified resource.
    }
 
    public function edit($id) {
        // Show the form for editing the specified resource.
    }
 
    public function update($id) {
        // (PUT) Update the specified resource in storage.
    }
 
    public function destroy($id) {
        // (DELETE) Remove the specified resource from storage.
    }
}

Kita dapat menghapus function 'create' dan 'edit' jika tidak ingin ditampilkan pada interface. Kita juga dapat memasukkan controller tersebut pada folder 'controller/api' untuk menjaga controller api terpisah. Pengaturan route map-nya akan seperti berikut:

Route::resource('api/posts}', 'api\PostsController');

4. Artisan

Arsian merupakan script PHP pada Laravel yang dijalankan menggunakan commend line yang dapat digunakan untuk menggali informasi tentang aplikasi dan juga digunakan untuk membuat dan optimalisasi code. Ada banyak commend line yang dapat digunakan pada Laravel. Untuk melihatnya kita dapat menjalankan commend berikut pada cmd.

php artisan list

Salah satu commend yang sangat membantu sekali adalah 'migrate' yaitu comment yang dapat anda gunakan untuk melakukan perubahan pada skema database. Kita juga dapat membuat commend kita sendiri. Pelajari lebih lanjut tentang develop your own artisan command. Fitur ini tidak akan anda temukan pada CodeIgniter.

5. Migrations

Pada CodeIgniter tidak ada cara yang gampang untuk mengsinkonkan skema database, update skema apalagi melakukan rollback pada skema sebelumnya. Sangat tidak mudah.

Pada Laravel kita dapat menjaga skema database kita sinkron antara pengembang dan server. Skema dapat sinkron hanya dengan menjalankan beberapa command Laravel pada command promt. Berikut command yang akan sering digunakan pada Laravel:

php artisan migrate:make create_posts_table
php artisan migrate
php artisan migrate:rollback

Command pertama adalah untuk membuat file skema yang dapat kita modifikasi sesuai kebutuhan database. Command ke dua adalah untuk menjalankan skema baru atau perubahan yang ada pada file skema. Sedangakan command ke tiga adalah untuk mengembalikan skema database pada skema sebelumnya. Hal yang menarik adalah ketika command line pertama dijalankan, pada file migration terdapat dua fucntion 'up', dan 'down'. Function tersebut berfungsi untuk meng-update perubahan dan me-rollback perubahan.

class CreatePostsTable extends Migration {
 
    public function up() {
        Schema::create('posts', function($table) {
            $table->increments('id');
            $table->string('content', 1000);
            $table->tinyInteger('status')->unsigned()->index();
            $table->timestamp('created_at')->index();
            $table->timestamp('updated_at')->index();
        });
    }
 
    public function down() {
        Schema::dropIfExists('posts');
    }
}

Juga ada function yang berperan untuk mengisi tabel pada skema dengan data. Cukup mirip dengan CodeIgniter dan sangat mudah dijalankan dengan command:

php artisan db:seed

6. Composer

Composer merupakan solusi untuk menambahkan dan mengelola packages pada aplikasi. Kita cukup menambahkan beberapa baris spesifikasi package, lakukan composer update, dan secara otomatis Laravel akan meng-install-nya. Jika ingin mendapatkan versi terbaru dari package tersebut, cukup lakukan hal yang sama. Tentu saja kita bisa menentukan sendiri kita akan menggunakan package versi berapa.

Jika kita coba buka file composer.json, kita dapat melihat ada area 'require' yang mana bisa kita isi dengan spesifikasi package. Contoh berikut saya menambahkan package user agent yang biasa saya gunakan pada Laravel.

"require": {
    "laravel/framework": "4.0.*",
    "mews/useragent": "dev-master"
},

Langkah berikutnya cukup tambahkan pada file config.php:

'providers' => array(
    'Mews\Useragent\UseragentServiceProvider',
    // etc...
),
 
'aliases' => array(
    'Agent' => 'Mews\Useragent\Facades\Useragent',
    // etc...
),

Kemampuan untuk menemukan package dengan mudah dan up to date, termasuk framework itu sendiri merupakan beban yang tak kan pernah lepas. Adanya composer memberi jalan untuk mempermudah hal tersebut.

7. Authentication

Saya menyukai Laravel dengan adanya fungsi-fungsi untuk register/login user. Ini sangat mempermudah kita dalam memulai pembuatan sebuah aplikasi. Di samping itu, juga terdapat banyak package yang tersedia untuk digunakan sebagai proses register dan login user.

Pada Laravel, kita dapat membuat kode hash untuk user baru.

Hash::make(Input::get('password'));

Kita kemudian dapat melakukan proses autentikasi dengan menggunakan 'attempt' method.

Auth::attempt(array('email' => Input::get('email'), 'password' => Input::get('password')));

Jika method tersebut mengembalikan nilai true, dan user terdaftar pada session, secara otomatis user object akan terbentuk dan kita dapat mengaksesnya menggunakan:

Auth::user();
Auth::user()->id;
// etc...

Kita juga dapat menambahkan atribut lainnya jika dibutuhkan;

Auth::user()->admin = true;

Method tersebut berpedan dalam proses pembuatan user dan autentikasi sehingga membuat kita dapat fokus pada hal lainnya dari aplikasi. Hal semacam ini tidak akan ditemukan pada CI selain dari pada kita harus mencari sendiri package yang sesuai dan itu pun tanpa auto-update dan dikeloka secara otomatis oleh CI.

8. Facade

Laravel merupakan object oriented framework dimana semua objeknya dapat diakses dengan facade design pattern. Inilah kenapa kode seperti User::find(1);  dapat diakses dan digunakan. Semua hal pada Laravel diperlakukan seperti kode tersebut. Misalkan kita memiliki model Users. Perhatikan kode berikut:

// CodeIgniter
$this->load->model('users_model');
$this->users_model->get(1);
// Laravel
User::find(1);

Untuk mengakses model, dalam hal ini kita ingin mencari User dengan ID 1, Laravel melakukannya dengan sangat elegant. Pada CI kita harus melakukan pengaturan 'autoload' terlebih dahulu.

Sumber:
laravel.com
whats new in Laravel 4
http://websanova.com

BANNER FREE MEMBER
Previous
Next Post »

2 comments

Click here for comments
23 Februari 2016 pukul 02.51 ×

Lengkap tutornya teman. Terimakasih
lasealwin.blogspot.co.id

Reply
avatar
Pintu Tekno
admin
18 Agustus 2016 pukul 21.20 ×

Thanks informasi nya gan...

Reply
avatar