Anda di halaman 1dari 81

Membuat CRUD Laravel Part I

Pada tulisan sebelumnya saya telah membahas beberapa hal


sebagai berikut:
Laravel : A Framework for web Artisans
Membuat Hello World di Laravel.
Cara menggunakan migration pada Laravel
Cara melakukan seeding pada Laravel
Setelah anda membaca tentang apa itu Laravel, cara membuat
Hello World, migration dan seeding, Kali ini, kita akan membahas
mengenai cara membuat aplikasi CRUD sederhana dengan
menggunakan Laravel. Artikel kali ini dibuat sesederhana yang
saya bisa, sehingga mudah dipelajari oleh pemula sekalipun.
Twitter Bootstrap
Untuk membuat user interface, kita akan menggunakan bantuan
Twitter Bootstrap. Untuk itu, silahkan unduh terlebih dahulu
disini. Kemudian extract hasil unduhan anda. Setelah di-extract
akan menemukan tiga folder didalamnya yaitu folder css, fonts dan
js. Copy ketiga folder tersebut ke dalam direktori `public`-nya
Laravel.

Bootstrap di dalam direktori publik laravel
Setelah Twitter Bootstrap anda pindahkan ke direktori public,
berarti sudah siap untuk digunakan pada aplikasi Laravel yang
akan kita buat. Oleh karena itu, marilah kita lupakan sejenak
mengenai Twitter Bootstrap ini dan memulai langkah selanjutnya.
Database Tabel
Sekarang, marilah kita membuat sebuah tabel baru untuk
menampung data yang akan kita gunakan dalam tutorial kali ini.
Misalnya, tabel tersebut akan menampung data-data buku yang
akan dijual. Dengan menggunakan command-line, jalankan
perintah php artisan migrate:make create_books_table. Maka, secara
otomatis akan tercipta sebuah file baru pada direktori
app/database/migrations. Buat definisi tabel sebagai berikut pada
file migrasi tersebut:
//--------------------------------------------------------
-----------------------------------------------------//
<?php use Illuminate\Database\Migrations\Migration;

class CreateBooksTable extends Migration {

public function up() {

Schema::create('books', function($table){
$table->increments('id');
$table->string('title')->unique();
$table->string('author');
$table->string('description');
$table->string('price');
$table->timestamps();
});

}

public function down()
{
Schema::drop('books');
}

}

?>

Lalu jalankan perintah php artisan migrate melalui command-
line. Maka secara otomatis akan tercipta sebuah tabel baru bernama
`books`, anda bisa melihatnya melalui phpmyadmin.
CRUD
CRUD merupakan singkatan dari Create, Read, Update dan Delete.
Untuk itu mari kita bahas satu persatu mulai dari Create
(memasukan data ke dalam database).
Create
Untuk memasukan data ke dalam database kita akan menggunakan
sebuah form. Pertama-tama, buat sebuah file baru pada direktori
app/views/ dengan nama layout.blade.php. Kemudian, pada file
tersebut, buat layout HTML sebagai berikut:
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>CRUD App</title>

<meta name='viewport' content='width=device-width, initial-
scale=1, maximum-scale=1' />
{{ HTML::style('css/bootstrap.min.css') }}

</head>;
<body>

@yield('content')

{{ HTML::script('js/jquery.min.js') }}
{{ HTML::script('js/bootstrap.js') }}

</body>
</html>


Perhatikan bahwa Laravel menggunakan Blade sebagai templating
engine. Apabila anda masih belum mengerti tentang Blade, tidak
masalah. Blade adalah sesuatu yang mudah, anda akan mengerti
setelah menyelesaikan tutorial ini.
Selanjutnya, masih pada folder app/views, buat sebuah file baru
bernama newbook.blade.php:

@extends('layout')

@section('content')
Hello, Semua form akan ditempatkan disini!
@stop


File inilah yang nantinya akan digunakan untuk menampilkan
form yang akan kita buat pada browser. Pada file tersebut anda
tidak perlu menulis lagi tag `html`, `title` , `body` karena sudah di-
extends dari file layout.blade.php dengan menggunakan
@extends('layout'). Semua yang akan ditampilkan di browser bisa
anda simpan diantara @section('content') dan @stop.

Selanjutnya, tambahkan definisi form pada file tersebut:

@extends('layout')

@section('content')

<div class='container'>

<h3>Insert new book</h3>

{{ Form::open()}}

{{Form::label('title', 'Title') }}

{{Form::text('title', '', array('class' => 'form-control'))}}

{{Form::label('author', 'Author') }}

{{Form::text('author', '', array('class' => 'form-control'))}}

{{Form::label('description', 'Description') }}

{{Form::textarea('description', '', array('class' => 'form-control'))}}

{{Form::label('price', 'Price') }}

{{Form::text('price', '', array('class' => 'form-control'))}}

{{Form::submit('Submit', array('class' => 'btn btn-primary')) }}

{{ Form::close() }}

</div>

@stop


Lalu, buat sebuah route pada file app/routes.php :

Route::get('newbook', function()
{
return View::make('newbook');
});


Akses route tersebut melalui browser, maka akan tampil form seperti
berikut ini:



Memasukan data ke database
Selanjutnya, mari kita buat Model dan Controller untuk
memasukan data diinputkan ke dalam database. Buat sebuah file
dengan nama Book.php pada direktori app/models:

<?php class Book extends Eloquent { } ?>


Harus diperhatikan bahwa nama class perlu disesuaikan dengan
nama tabel yang digunakan, karena pada contoh kali ini kita
menggunakan tabel bernama books, maka nama class yang dibuat
haruslah Book. Seperti halnya pada Model User, karena nama
tabelnya users. Sebenarnya, anda juga bisa menentukan nama
Model sesuka hati. Namun, caranya tidak akan dibahas pada
tulisan ini. Mungkin lain kali akan saya bahas.
Ok, setelah Model anda buat, selanjutnya mari kita buat controller.
Pada direktori app/controllers buatlah sebuah file baru dengan
nama BookController.php :

<?php

class BookController extends BaseController {
}

?>


Setelah itu, buat fungsi untuk memasukan data buku baru ke
dalam database:

<?php

class BookController extends BaseController {
public function store(){

$book = new Book;

$book->title = Input::get('title');;
$book->author = Input::get('author');;
$book->description = Input::get('description');;
$book->price = Input::get('price');;

$book->save();

}
}

?>


Bagian Terakhir
Ok, setelah Model dan Controller dibuat, langkah selanjutnya yang
harus dilakukan adalah membuat route baru yang mengarah
kepada fungsi yang kita buat di dalam Controller. Buka routes.php,
tambahkan route sebagai berikut:


Route::post('book/insert', 'BookController@store');


Kemudian pada file app/views/newbook.blade.php ubah {{
Form::open() }} menjadi {{ Form::open(array('action' =>
'BookController@store')) }}. Dimana BookController@store
disesuaikan dengan nama Controller dan Action yang kita tuju.
Selesai. Anda sekarang bisa mencobanya dengan memasukan data
pada form kemudian tekan tombol submit. Lalu, cek di database
apakah data yang diinputkan sudah masuk.
Konklusi
Diatas kita telah membahas mengenai membuat Create
menggunakan Laravel. Yaitu dengan cara membuat Model,
Kemudian membuat View yang bisa mengirim data melalui form,
data pada form tersebut kemudian dikirim ke controller untuk
disimpan ke dalam database dengan menggunakan Class Model
yang telah dibuat. Selanjutnya, pada Part 2 kita akan membahas
mengenai cara menampilkan data (Read).

Membuat CRUD Sederhana pada Laravel : Part 2
Sebelumnya kita telah membahas cara memasukan data ke dalam
database dengan menggunakan Laravel (Create). Kali ini kita akan
membahas tentang cara menampilkan data dari database. Ada tiga
tahapan yang akan dilakukan yaitu:
Membuat route.
Mengirim data ke view.
Membuat looping.
Pertama-tama marilah kita membuat sebuah route baru sebagai
berikut:

Route::get('booklist', function(){

});


Setelah itu, kita akan mengambil semua data dari tabel books yang
telah kita buat sebelumnya. Ingat, untuk mengakses tabel books kita
akan menggunakan Model bernama Book. Untuk melakukannya
tambahkan Book::all() pada route yang telah kita buat:

Route::get('booklist', function(){

$books = Book::all();

});


Setelah itu, kita akan memanggil sebuah view sekaligus mengirim
variable $books ke view tersebut.

Route::get('booklist', function(){

$books = Book::all();
return View::make('listbook')->with('booksdata', $books);

});


Jika, anda mengakses route tersebut, bisa dipastikan sebuah pesan
error akan muncul. Itu karena view bernama listbook masih belum
kita buat. Oleh karena itu, mari kita buat view tersebut. Buat
sebuah file baru bernama listbook.blade.php Sebagai berikut:


@extends('layout')

@section('content')
<!-- data akan ditampilkan disini -->
@stop



Pada route, kita telah mengirimkan sebuah variable bernama
booksdata yang bisa diakses melalui view. Variable tersebut bersisi
semua data dari tabel books yang bisa kita tampilkan dengan
bantuan looping :

@extends('layout')

@section('content')
<section class="container">
<table class="table">
<tr>
<th>Title</th>
<th>Author</th>
<th>Description</th>
<th>Price</th>
</tr>
@foreach($booksdata as $book)
<tr>
<td>{{ $book->title }}</td>
<td>{{ $book->author }}</td>
<td>{{ $book->description }}</td>
<td>{{ $book->price }}</td>
</tr>
@endforeach
</table>
</section>
@stop


Jika anda perhatikan pada code diatas, kita menggunakan {{
$book->title }} untuk judul buku, {{ $book->author }} untuk
pengarang dsb. Syntax yang digunakan yaitu blade, dimana {{
$book->title }} bisa disamakan dengan <?php echo $book->title; ?> .
Sekarang, anda bisa buka route booklist melalui browser, maka
semua data yang berada pada table books akan ditampilkan
dalam bentuk table. Cara akses route tersebut misal:

http://lrv.dev/booklist


Atau jika anda menggunakan domain localhost :

http://localhost/booklist


Kita telah membahas mengenai Create dan Read. Pada bagian
selanjutnya, kita akan membahas mengenai Update.
Bersambung

Membuat CRUD sederhana pada Laravel : Part 3
Pada Tulisan sebelumnya kita telah membahas tentang Create dan
Read. Sekarang, mari kita melangkah ke tahap selanjutnya, yaitu
Update. Pertama-tama, kita akan menampilkan link edit pada
tabel yang telah kita buat sebelumnya ketika menampilkan data.
Ubah file listbook.blade.php menjadi sebagai berikut:
@extends('layout')

@section('content')
<section class="container">
<table class="table">
<tr>
<th>Title</th>
<th>Author</th>
<th>Description</th>
<th>Price</th>
<th>#</th>
</tr>
@foreach($booksdata as $book)
<tr>
<td>{{ $book->title }}</td>
<td>{{ $book->author }}</td>
<td>{{ $book->description }}</td>
<td>{{ $book->price }}</td>
<td>{{ link_to_action('BookController@edit', 'edit', array($book-
>id))}}</td>
</tr>
@endforeach
</table>
</section>
@stop
Pada kode diatas, kita menambahkan link_to_action yang
merupakan helper untuk membuat HTML link. Dimana, link
tersebut akan mengarah ke method edit pada controller bernama
BookController. Jika anda jalankan di browser (dengan membuka
route booklist), maka akan muncul error sebagai berikut:
ErrorException
Route [BookController@edit] not defined. (View:
/var/www/laravel/app/views/listbook.blade.php)
Error tersebut muncul karena kita belum membuat route yang
mengarah ke method tersebut, disamping method itu sendiri belum
kita buat. Untuk itu, tambahkan route sebagai berikut
pada file routes.php :
Route::get('book/edit/{id}', 'BookController@edit');
Kemudian, tambahkan action edit pada BookController:
public function edit($id)
{
# code...
}
Jika, anda klik pada salah satu link yang ditampilkan pada
tabel, maka akan muncul halaman kosong pada browser. Untuk
mengubah halaman kosong tersebut menjadi halaman edit, ubah
fungsi edit yang barusan kita tambahkan menjadi sebagai
berikut:
public function edit($id)
{
$book = Book::find($id);
return View::make('editbook')->with('book', $book);
}
Jika, anda jalankan lagi maka kali ini bukan halaman kosong
yang anda dapatkan, tetapi anda akan melihat error sebagai
berikut:
InvalidArgumentException
View [editbook] not found.
Ini dikarenakan kita belum membuat view
bernama editbook. Untuk itu, pada folder app/views
buatlah file baru dengan nama editbook.blade.php :
@extends('layout')

@section('content')

<div class='container'>

<h3>Edit book</h3>

{{ Form::open() }}

{{Form::hidden('id', $book->id)}}

{{Form::label('title', 'Title') }}

{{Form::text('title', $book->title , array('class' => 'form-control'))}}

{{Form::label('author', 'Author') }}

{{Form::text('author', $book->author , array('class' => 'form-
control'))}}

{{Form::label('description', 'Description') }}

{{Form::textarea('description', $book->description , array('class' =>
'form-control'))}}

{{Form::label('price', 'Price') }}

{{Form::text('price', $book->price , array('class' => 'form-control'))}}

{{Form::submit('Update', array('class' => 'btn btn-primary')) }}

{{ Form::close() }}

</div>

@stop
Reload halaman yang menampilkan error tersebut dan anda akan
melihat form edit beserta nilai dari masing-masing field.
Update
Untuk melakukan update, tambahkan fungsi update
pada BookController:
public function update()
{
$id = Input::get('id');
$book = Book::find($id);

$book->title = Input::get('title');
$book->author = Input::get('author');
$book->description = Input::get('description');
$book->price = Input::get('price');

$book->save();
}
Dan, jangan lupa untuk menambahkan route baru sebagai berikut:
Route::post('book/update', 'BookController@update');
Setelah itu, pada file editbook.blade.php, ubahlah
{{ Form::open()) }}
menjadi
{{ Form::open(array('action' => 'BookController@update')) }}
Sekarang, cobalah anda ubah judul dari buku tersebut, lalu klik
tombol update. Maka, data judul buku tersebut akan berubah pula
di database.


Membuat CRUD Sederhana pada Laravel : Part 4


Pada kesempatan kali ini kita akan membuat
fungsi delete .Fungsi delete digunakan untuk menghapus data
yang telah kita masukan ke dalam database. Pertama-tama,
tambahkan link delete di sebelah link edit dengan cara
mengubah file listbook.blade.php sebagai berikut:
@extends('layout')

@section('content')
<section class="container">
<table class="table">
<tr>
<th>Title</th>
<th>Author</th>
<th>Description</th>
<th>Price</th>
<th>#</th>
</tr>
@foreach($booksdata as $book)
<tr>
<td>{{ $book->title }}</td>
<td>{{ $book->author }}</td>
<td>{{ $book->description }}</td>
<td>{{ $book->price }}</td>
<td>{{ link_to_action('BookController@edit', 'edit', array($book-
>id))}} | {{ link_to_action('BookController@delete', 'delete',
array($book->id))}}</td>
</tr>
@endforeach
</table>
</section>
@stop
Perhatikan, pada kode diatas kita menambahkan {{
link_to_action('BookController@delete', 'delete', array($book->id))}}
yang digunakan untuk menampilkan link delete. Apabila anda
jalankan di browser dengan cara mengakses route booklist,
maka akan muncul error sebagai berikut:
ErrorException
Route [BookController@delete] not defined. (View:
/var/www/laravel/app/views/listbook.blade.php)
Hal, ini disebabkan kita belum
menambahkan route dan action yang diperlukan. Oleh
karena itu, tambahkan route baru sebagai berikut:
Route::get('book/delete/{id}', 'BookController@delete');
Jika, anda jalankan lagi pada browser maka tampilan akan
berjalan normal dan sudah terdapat link delete didalam tabel.
Namun, apabila link tersebut anda klik, tetap akan terjadi error,
karena method delete masih belum dibuat, untuk itu
pada BookController, tambahkan fungsi delete sebagai
berikut:
public function delete($id)
{
# code...
}
Execute Delete
Sekarang, jika anda klik delete maka tidak akan muncul lagi
pesan error. Namun, data tersebut masih belum terhapus dari
dalam database karena kita belum menambahkan apa-apa pada
method delete. Untuk itu, ubah fungsi delete menjadi sebagai
berikut:
public function delete($id)
{
$book = Book::find($id);
$book->delete();
return Redirect::to('booklist');
}
Sekarang, jika anda klik link delete maka data buku yang
bersangkutan akan dihapus. Perhatikan bahwa kode return
Redirect::to('booklist'); digunakan untuk mengembalikan (redirect)
anda ke halaman dengan route booklist.

Membuat autentikasi pengguna dengan menggunakan Laravel
Autentikasi merupakan hal yang sangat penting dalam sebuah
website. Dengan menggunakan autentikasi kita bisa mencegah orang
yang tidak berkepentingan untuk mengakses situs yang kita buat.
Saya rasa anda sudah paham tentang apa itu autentikasi, jadi saya
pikir cukup sudah untuk penjelasannya. Mari kita lanjutkan ke
cara membuat autentikasi menggunakan Laravel. Sebelumnya, saya
asumsikan anda telah melakukan instalasi Laravel pada localhost
dan melakukan setting database.
Pertama-tama yang harus kita buat adalah tabel user. Untuk
membuat tabel user, buat migrasi dengan menjalankan perintah
sebagai berikut:
php artisan migrate:make create_user_table
Buka folder app/migration, anda akan melihat sebuah file berisi
class yang bernama CreateUserTable. Pada class tersebut terdapat
dua method bernama up dan down. Method up digunakan
untuk membuat tabel, sedangkan method down digunakan untuk
menghapus tabel. Tambahkan definisi tabel sebagai berikut pada
method up:

Schema::create('users', function($table)
{
$table->increments('id');
$table->string('firstname', 20);
$table->string('lastname', 20);
$table->string('email', 100)->unique();
$table->string('password', 64);
$table->timestamps();
});
Kemudian pada method down tambahkan perintah sebagai
berikut:
Schema::drop('users');
Selanjutnya, pada command line jalankan perintah:
php artisan migrate
Dengan begitu, sebuah tabel bernama users akan dibuat pada
database, lengkap beserta seluruh field-field yang dibutuhkan.
Untuk membuat sistem autentikasi, diperlukan sebuah model,
controller dan view. Model yang digunakan adalah model bernama
User yang biasanya sudah ada secara default pada instalasi
Laravel. Kemudian untuk controller kita akan membuat sebuah
controller baru bernama UserController, untuk membuat
UserController, jalankan perintah sebagai berikut menggunakan
command line:
php artisan controller:make UserController
Maka, sebuah file baru bernama UserController.php akan tercipta
pada folder app/controller.
Membuat Halaman Registrasi
Setelah controller kita buat, sekarang kita akan menampilkan
sebuah halaman registrasi. Pertama-tama, kita akan mengubah
fungsi create pada UserController menjadi fungsi register:
public function register() { return View::make('register'); }
Pada fungsi register diatas, kita akan diarahkan pada sebuah view
bernama register. Namun, view tersebut masih belum kita buat.
Untuk itu pada folder app/views tambahkan sebuah file baru
bernama register.blade.php:
@extends('layout')
@section('content')
<div class="container"> <h2>Register</h2>

@if(Session::has('pesan'))
<div class="alert alert-success">{{ Session::get('pesan') }}</div>
@endif

{{Form::open(array('action' => 'UserController@store')) }}
{{Form::label('firstname', 'First Name') }}
{{Form::text('firstname', '', array('class' => 'form-control'))}}
{{Form::label('lastname', 'Last Name') }}
{{Form::text('lastname', '', array('class' => 'form-control'))}}
{{Form::label('email', 'Email') }}
{{Form::text('email', '', array('class' => 'form-control'))}}
{{Form::label('password', 'Password') }}
{{Form::password('password', array('class' => 'form-control'))}}
<br>
{{Form::submit('Registerin Dong!', array('class' => 'btn btn-
primary')) }}
{{ Form::close() }} </div> @stop
Setelah itu, buatlah route baru pada file routes.php seperti berikut
ini:
Route::get('register', 'UserController@register');
Route::post('store', 'UserController@store');
Setelah route dibuat, sekarang anda bisa membuka halaman
register yang barusan anda buat melalui browser dengan cara
mengakses route register.Misal:
http:/localhost/laravel/register

Registrasikan Pengguna
Setelah halaman registrasi kita buat, kita akan memasukan data
dari form yang barusan kita buat ke dalam database. Pada form
tersebut terdapat kode sebagai berikut:
{{Form::open(array('action' => 'UserController@store')) }}
Itu berarti, ketika disubmit, data dari form tersebut akan di-handle
Oleh method store pada UserController. Untuk itu silahkan buka
UserController kemudian tambahkan perintah sebagai berikut ke
dalam method store:
$user = new User();

$user->firstname = Input::get('firstname');
$user->lastname = Input::get('lastname');
$user->email = Input::get('email');
$user->password = Hash::make(Input::get('password'));

$user->save();

return Redirect::to('register')->with('pesan', 'Registrasi berhasil!');
Sekarang, apabila anda isi form tersebut kemudian tekan tombol
Registerin Dong! (seperti submit), maka data yang anda masukan
akan tersimpan di database.
Membuat Fitur Login
Untuk membuat halaman Login, pertama-tama buatlah dua buah
fungsi baru yaitu login dan authenticate:
public function login(){
}

public function authenticate(){
}
Selain itu, buatlah dua buah route baru pada file routes.php
sebagai berikut:
Route::get('login', 'UserController@login');
Route::post('authenticate', 'UserController@authenticate');
Halaman Login
Sekarang, kita akan membuat tampilan halaman login. Pada
method login tambahkan baris perintah sebagai berikut:
return View::make('login');
Kemudian pada direktori app/views tambahkan sebuah view baru
dengan nama file login.blade.php:
@extends('layout')

@section('content')
<div class="container">
<div class="col-md-5 col-md-offset-3">
<h2>Login</h2>
<hr />

@if(Session::has('pesan_error'))
<div class="alert alert-danger">{{ Session::get('pesan_error') }}</div>
@endif

{{Form::open(array('action' => 'UserController@authenticate')) }}
{{Form::label('email', 'Email') }}
{{Form::text('email', '', array('class' => 'form-control'))}}
{{Form::label('password', 'Password') }}
{{Form::password('password', array('class' => 'form-control'))}}
{{Form::submit('Login', array('class' => 'btn btn-primary')) }}
{{Form::close() }}

</div>
</div>
@stop

Autentikasi
Ketika tombol login di-klik, form akan diarahkan ke method
authenticate pada UserController. Pada method inilah autentikasi
dilakukan, untuk itu tambahkan baris perintah sebagai berikut
pada method authenticate:
if (Auth::attempt(array('email' => Input::get('email'), 'password' =>
Input::get('password'))))
{
echo "login berhasil";
}
else{
return Redirect::to('login')->with('pesan_error', 'Login gagal, email
atau password salah!');
}
Sekarang, jika anda tekan tombol login dan autentikasi berhasil
maka akan tampil tulisan login berhasil. Namun, jika
autentikasi gagal, maka sebuah pesan kesalahan akan ditampilkan
pada halaman login.

Membuat Halaman Dashboard
Sebelumnya, apabila kita sudah berhasil login kita hanya akan
melihat tulisan login berhasil. Nah, kali ini kita akan membuat
supaya pengguna diarahkan ke halaman dashboard apabila login
berhasil. Buat sebuah controller baru bernama
DashboardController:
<?php
class DashboardController extends BaseController
{
public function index(){
return View::make('dashboard');
}
}
?>
Setelah itu, buatlah sebuah route baru pada routes.php sebagai
berikut:
Route::get('dashboard', 'DashboardController@index');
Kemudian, jangan lupa untuk membuat sebuah view baru bernama
dashboard.blade.php. Setelah itu, ubah autentikasi yang ada pada
method authenticate menjadi sebagai berikut:
function authenticate(){

if (Auth::attempt(array('email' => Input::get('email'), 'password' =>
Input::get('password'))))
{
return Redirect::to('dashboard');
}

return Redirect::to('login')->with('pesan_error', 'Login gagal, email
atau password salah!');
}
Sampai disini, apabila anda mencoba login kembali maka akan
diarahkan ke halaman dashboard. Tentu halaman dashboard yang
dimaksud adalah halaman kosong, mengingat kita baru membuat
viewnya saja, tanpa ada isinya.
Membuat fungsi logout
Sekarang, saatnya kita membuat fungsi logout. Untuk itu, kita akan
membuat view dashboard yang telah kita buat dari halaman
kosong menjadi sebagai berikut:
@extends('layout')

@section('content')
<nav class="navbar navbar-inverse navbar-static-top"
role="navigation">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-
toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">AuthApp</a>
</div>

<!-- Collect the nav links, forms, and other content for toggling --
>
<div class="collapse navbar-collapse" id="bs-example-navbar-
collapse-1">
<ul class="nav navbar-nav navbar-right">
<li><a href="logout"><i class="glyphicon glyphicon-off"></i>
logout</a></li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>

<div class="container">
<h1>Dashboard</h1>
</div>
@stop

Selanjutnya, perhatikan pada halaman dashboard diatas terdapat
kode sebagai berikut:
<li><a href="logout"><i class="glyphicon glyphicon-off"></i>
Pada atribut href, kita bisa melihat bahwa kita akan diarahkan
pada route logout apabila link tersebut kita klik. Namun, route
logout masih belum kita buat, oleh itu tambahkan route logout
sebagai berikut pada file routes.php:
Route::get('logout', 'UserController@logout');
Kemudian, tambahkan sebuah method pada UserController sebagai
berikut:
public function logout(){
Auth::logout();
return Redirect::to('login')->with('pesan', 'berhasil logout');
}
Selanjutnya, untuk menampilkan pesan berhasil logout, tambahkan
perintah sebagai berikut pada bagian atas form login:
@if(Session::has('pesan'))
{{ Session::get('pesan') }}

@endif
Kesimpulan
Sejauh ini anda telah berhasil membuat halaman registrasi, login
dan logout. Tentunya, masih ada beberapa kelemahan dalam
aplikasi yang barusan kita buat. Misalnya, akan terjadi error
apabila kita memasukan email yang sama saat registrasi.
Kemudian, jika kita belum login dan mengakses
http://localhost/dashboard seharusnya pengguna diarahkan ke
halaman login. Dan masih ada beberapa hal lagi yang harus
diperbaiki namun tidak akan saya bahas dalam tulisan ini
berharap anda bisa mencobanya sendiri.
Have a nice day!

Bekerja dengan Laravel lebih cepat menggunakan Laravel
Generators
Laravel-generators adalah sebuah package yang memungkinkan
pengguna untuk membuat controller, model, dan sebagainya dengan
lebih cepat. Laravel-generators dibuat oleh Jeffrey Ways. Untuk
memasang laravel-generators pada Laravel yang telah anda instal
anda perlu menambahkan perintah berikut pada file composer.json:
"require-dev": {
"way/generators": "2.*"
},
Setelah itu, jalankan perintah composer update pada command-
line. Tunggu sampai proses instalasi selesai. Setelah terinstal anda
bisa melihat perintah apa saja yang bisa anda gunakan pada
laravel-generators dengan menjalankan php artisan pada
command-line.
Membuat Controller
Untuk membuat sebuah controller baru dengan menggunakan
laravel-generators, anda tinggal menjalankan perintah:
php artisan generate:controller UserController
Pada contoh diatas, kita membuat sebuah controller dengan nama
UserController. Sesuaikan nama controller tersebut dengan nama
controller yang ingin anda buat.
Sekarang, jika anda buka direktori app/controller, maka anda
akan melihat sebuat file baru bernama UserController.php dimana
didalamnya sudah terdapat action-action seperti index, create, store
dan sebagainya.
Membuat Migration
Sebenarnya, untuk membuat migration anda juga bisa
melakukannya tanpa menggunakan laravel-generators yaitu dengan
menggunakan perintah:
php artisan migrate:make create_user_table
Dimana create_user_table adalah nama migration yang akan kita
buat. Untuk membuat migration dengan menggunakan Laravel-
generators, lakukan perintah sebagai berikut:
php artisan generate:migration create_user_table
Jika, anda perhatikan, terdapat sedikit perbedaan pada kedua
perintah diatas. Silahkan anda perhatikan pada file yang ter-
generate. Maka, file yang tergenerate dengan menggunakan laravel-
generators terlihat sedikit lebih lengkap dan memudahkan kita
untuk melangkah ke proses selanjutnya.
Membuat Model
Untuk membuat model cukup gunakan perintah sebagai berikut:
php artisan generate:model Example
Maka sebuah file baru bernama Example.php akan terbentuk pada
direktori app/model sebagai berikut:
<?php

class Example extends \Eloquent {
protected $fillable = [];
}
Membuat View
Membuat view sangatlah mudah, ketikan perintah berikut melalui
command-line:
php artisan generate:view Example
Dengan begitu, sebuah file baru akan dibuat pada direktori
app/views dengan nama Example.blade.php.
Semoga Bermanfaat.

Mengenal CRUD dan Relationship pada Eloquent ORM Laravel
Eloquent adalah sebuah ORM (Object Relational Mapping) yang
sangat powerful dan expressive. Jika anda pernah bekerja dengan
object pada php, maka anda tidak akan terlalu kesulitan bekerja
dengan Eloquent ORM.
Pada Laravel, setiap model (yang merupakan turunan dari
Eloquent) mewakili sebuah table pada database. Namun, perlu
diingat meskipun sebuah model mewakili sebuah tabel, dalam
prakteknya kita seringkali menggunakan beberapa model untuk
mengambil data. Dengan menggunakan relationship kita bisa
melakukan pengambilan data dari banyak tabel sekaligus.
Kadangkala, saat menggunakan Laravel kita tidak menggunakan
eloquent, tetapi menggunakan class bernama DB. Bahkan dengan
cara demikian, kita tidak perlu membuat model. Hal ini sah-sah
saja, namun alangkah bijaknya jika menggunakan eloquent model.
Dengan menggunakan eloquent model, program yang kita buat bisa
lebih rapi dan mudah dibaca dan juga tentu saja lebih cepat serta
mudah digunakan kembali.
Membuat Eloquent Model
Kali ini kita akan membuat dua buah Model bernama Penulis
dan Artikel. Namun sebelumnya, terlebih dahulu buat database
bernama Orang dan Artikel dengan menggunakan Migrasi sebagai
berikut:
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateArticlesTable extends Migration {

/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('articles', function(Blueprint $table)
{
$table->increments('id');
$table->string('judul');
$table->text('body');
$table->integer('author_id');
$table->timestamps();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('articles');
}

}
?>
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateAuthorsTable extends Migration {

/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('authors', function(Blueprint $table)
{
$table->increments('id');
$table->string('username')->unique();
$table->text('bio');
$table->timestamps();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('authors');
}

}
?>
Setelah migrasi dibuat, kemudian jalankan perintah php artisan
migrate pada command-line. Lalu, buatlah sebuah model sebagai
berikut:
<?php class Author extends Eloquent {} ?>
Model kemudian disimpan pada file app/models/Author.php. Model
diatas secara otomatis dimapping kepada tabel bernama authors
yang telah kita buat sebelumnya dengan menggunakan migrasi.
Proses mapping secara otomatis mengikuti aturan tunggal dan jamak
dalam bahasa inggris dimana nama class model menggunakan kata
tunggal (contoh Author, User, dsb) sedangkan nama tabel di
database menggunakan kata jamak (contoh authors, users dsb).
Create
Dengan menggunakan eloquent, kita bisa memasukan data ke
dalam database dengan berbagai cara. Berikut adalah cara yang
paling sering saya gunakan:
// app/routes.php

Route::get('/', function()
{
$author = new Author;
$author->username = 'Sleeping Komodo';
$author->bio = 'Saya adalah orang yang ganteng';
$author->save();
});
Select
Berikut adalah cara melakukan select menggunakan eloquent:
// app/routes.php

Route::get('/', function()
{
$authors = Author::all()->first();

echo $authors->username;
echo $authors->bio;

});
Fungsi first digunakan untuk mengambil hanya record yang
pertama dari data yang ada pada query select. Untuk mengambil
semua data, cukup hilangkan method first tersebut, setelah itu data
bisa ditampilkan dengan menggunakan foreach:
// app/routes.php

Route::get('/', function()
{
$authors = Author::all();

foreach($authors as $author)
{
echo $author->username;
echo $author->bio;
}
});

Update
Mari kita lanjutkan ke fungsi selanjutnya, yaitu update. Saya akan
merubah nama author yang tadinya Sleeping Komodo menjadi
Sleeping Komodo ganteng. Seperti kita ketahui, setiap record pada
tabel authors memiliki id yang di-generate secara otomatis
menggunakan auto-increment. Kali ini anggap saya record yang
akan kita ubah memiliki id = 1, maka kode untuk melakukan
update menjadi sebagai berikut:
// app/routes.php

Route::get('/', function()
{
$author = Author::find(1); //Temukan author dengan id = 1

$author->username = 'Sleeping Komodo Ganteng';
$author->bio = 'Saya adalah orang yang ganteng';

$author->save();
});
Perhatikan bahwa contoh diatas hampir sama dengan contoh
ketika kita melakukan create. Bedanya kita menggunakan
Author::find(1) untuk menginisialisasi variabel $author.
Delete
Delete adalah yang paling mudah. Berikut contoh penggunaan
delete pada eloquent:
// app/routes.php

Route::get('/', function()
{
$author = Author::find(1); //Temukan author dengan id = 1

$author->delete();
});

Relationship menggunakan eloquent
Relationship adalah komponen utama pada eloquent. Sebelum
mempelajari relationship marilah terlebih dahulu menambahkan
data-data berikut pada tabel authors:
Route::get('/', function()
{
$author = new Author;
$author->username = 'Benny Ibrahim';
$author->bio = 'Seorang penulis buku';
$author->save();

$author = new Author;
$author->username = 'Adam Saefullah';
$author->bio = 'Seorang penulis artikel';
$author->save();

$author = new Author;
$author->username = 'Willy Alghifari';
$author->bio = 'Seorang penulis blog';
$author->save();
});
Setelah anda jalankan kode diatas, maka 3 record baru akan
dimasukan ke dalam database. Kemudian ubah route diatas
menjadi sebagai berikut:
Route::get('/', function()
{
$author = Author::find(1);

$article = new Article;
$article->title = 'Perjalanan ke pulau harapan';
$article->body = 'Perjalanan ke pulau harapan menjadi sangat
menarik karena adanya rombongan fotografer yang ikut bersama
kami
sehinga momen perjalanan kami bisa diabadikan';
$article->author_id = $author->id;
$article->save();

$article2 = new Article;
$article2->title = 'Perjalanan ke pulau harapan versi 2';
$article2->body = 'Perjalanan ke pulau harapan menjadi sangat
menarik karena adanya rombongan fotografer yang ikut bersama
kami
sehinga momen perjalanan kami bisa diabadikan versi 2';
$article2->author_id = $author->id;
$article2->save();

});
Setelah kode diatas, dijalankan ganti $author = Author::find(1);
menjadi $author = Author::find(2); kemudian jalankan lagi. Setelah
itu, itu ganti lagi menjadi $author = Author::find(3); lalu jalankan
lagi dan seterusnya sebanyak jumlah author yang ada di database
sehingga, setiap author memiliki dua article.
Menggunakan hasMany
Seorang penulis (author) biasanya memiliki banyak artikel. Pada
Laravel, kita bisa mendefinisikan relationship sebagai berikut:
<?php
class Author extends Eloquent {

public function articles()
{
return $this->hasMany('Article');
}

}
?>
Jika kode tersebut diterjemahkan ke dalam bahasa manusia maka
akan menjadi this author has many article / author ini memiliki
banyak artikel. Cukup mudah dipahami bukan?
Menggunakan belongsTo
<?php
class Article extends Eloquent {

public function author()
{
return $this->belongsTo('Author');
}

} ?>
Kita juga bisa menerjemahkan method belongsTo ini ke dalam
bahasa manusia menjadi this article belongs to author / artikel ini
dimiliki oleh satu author. Lumayan simple kan ?
Menggunakan dynamic method
Sekarang, setelah anda membuat relationship pada model, kita bisa
melakukan select terhadap data yang ada pada tabel bersangkutan,
tentunya dengan memanfaatkan relationship tersebut. Sebagai
contoh saya akan mengambil article dengan nama penulis Benny
Ibrahim maka saya bisa melakukannya dengan cara sebagai
berikut:
Route::get('/', function()
{
$author = Author::whereUsername('Benny Ibrahim')->first();

foreach($author->articles as $article){
echo $article->title;
echo $article->body;
}

});
Perhatikan, pada contoh diatas kita menggunakan method
whereUsername. Jika anda pernah melihat dokumentasi Laravel,
maka anda tidak akan pernah menemukan method tersebut. Karena
method tersebut adalah method dinamis (dynamic method) dimana
kita mengkombinasikan kata where dengan nama kolom yang
ingin kita gunakan (username). Jadi, jika anda ingin memfilter
data berdasarkan kolom dengan nama umur, maka anda bisa
menggunakan whereUmur, jika berdasarkan kolom jabatan =
whereJabatan dan seterusnya.
Sekarang mari kita lakukan kebalikannya, kita mengambil nama
penulis yang menulis article dengan judul Perjalanan ke pulau
harapan.
Route::get('/', function()
{
$article = Article::whereTitle('Perjalanan ke pulau harapan')-
>first();

echo $article->author->username;
echo $article->author->bio;

});
Perhatikan bahwa model yang digunakan pada contoh diatas
adalah Article dimana kita bisa mengakses kolom-kolom dari
tabel authors dengan mudah tanpa harus menginisisasi model
Author dengan menggunakan $authors = Author::all() dsb.
Contoh lain untuk cara mengambil data menggunakan relationship
adalah sebagai berikut:
Route::get('/', function()
{
$articles = Article::all();

foreach($articles as $article){
echo $article->author->username;
echo ' menulis artikel berjudul ';
echo $article->title;
}

});
Perhatikan, bahwa cara diatas akan berjalan sangat lambat
terutama terutama ketika menangani data dalam jumlah yang
banyak, karena kueri yang digunakan secara background tidak
efektif dan terdiri dari beberapa kueri. Misalnya, jika terdapat 10
data, maka akan diselect satu-satu sehingga terdapat 10 kueri.
Sebagai alternatif, gunakan cara sebagai berikut:
Route::get('/', function()
{
$paintings = Painting::with('author')->get();

foreach($articles as $article){
echo $article->author->username;
echo ' menulis artikel berjudul ';
echo $article->title;
}

});
Dengan cara tersebut kueri yang digunakan bisa lebih sedikit yaitu
hanya menjadi 2 query saja. Anda bisa melihat jumlah query yang
digunakan dengan men-trace sendiri.
Semoga bermanfaat.
Membuat Shopping Cart Menggunakan Laravel
Shopping cart sangat diperlukan ketika kita membuat aplikasi
terutama yang berhubungan dengan toko online. Dengan
menggunakan shopping cart, barang yang akan dibeli oleh
pengguna bisa disimpan terlebih dahulu dan pengguna dapat
melanjutkan berbelanja. Data barang disimpan di dalam cache,
sehingga ketika pengguna berpindah halaman pada aplikasi, data
tersebut tidak hilang. Data barang tersebut kemudian akan
disimpan di database ketika pengguna selesai berbelanja dan
menekan tombol checkout.
Instal package shopping cart
Untuk membuat shopping cart pada Laravel kita akan
menambahkan sebuah package baru. Untuk itu, buka file
composer.json dan tambahkan "gloudemans/shoppingcart": "dev-
master" pada bagian require sehingga menjadi seperti berikut:
"require": {
"laravel/framework": "4.1.25",
"gloudemans/shoppingcart": "dev-master"
},
setelah itu, buka command-line lalu masuk ke dalam folder
laravel anda ( cd c://xampp/htdocs/<nama folder> bagi pengguna
windows atau cd /var/www/<nama folder> jika anda menggunakan
linux). Setelah masuk ke dalam direktori, lalu jalankan perintah
composer update, tunggu sampai proses update selesai.
Setelah itu, buka file app/config/app.php kemudian tambahkan
kode berikut pada bagian service providers:
'Gloudemans\Shoppingcart\ShoppingcartServiceProvider'
Lalu pada bagian aliases tambahkan kode berikut:
'Cart' => 'Gloudemans\Shoppingcart\Facades\Cart',
NOTE: Saat menjalankan composer update anda perlu terhubung ke
internet.
Membuat tabel Produk
Sebelum lebih jauh membahas penggunaan shopping cart, mari kita
buat terlebih dahulu database untuk menampung produk dengan
menjalankan migrasi sebagai berikut:
Schema::create('products', function($table){
$table->increments('id')->unsigned();
$table->string('name');
$table->string('description', 500);
$table->string('price', 10);
$table->timestamps();
});
Tabel produk yang saya buat diatas saya buat sesederhana mungkin
agar tidak terlalu rumit. Tabel dibuat dengan migrasi-nya laravel.
Bagi anda yang belum tahu cara migrasi tabel dengan laravel, bisa
baca disini. Anda juga bisa membuat tabel secara manual dengan
menggunakan PHPMyadmin jika anda mau. Setelah tabel dibuat,
masukan beberapa data ke dalamnya.
Menampilkan List Produk
Selanjutnya, kita buat halaman untuk menampilkan list produk.
Dimana pada masing-masing item, terdapat tombol add to cart
yang berfungsi memasukan produk ke keranjang belanja (shopping
cart). Untuk membuat halaman tersebut, ada beberapa tahapan
yang harus kita lakukan. Pertama pada direktori app/model buat
sebuah model bernama Product:
<!-- app/model/product.php -->
<?php
class Product extends Eloquent
{

}
?>
Selanjutnya, pada file app/routes.php, ubah route utama menjadi
seperti berikut:
Route::get('/', function()
{
$products = Product::all();
return View::make('productlist')->with('products', $products);
});
Lalu pada folder app/views buat sebuah view baru dengan nama
productlist.blade.php sesuai yang kita telah definisikan pada route:
<!-- productlist.blade.php -->

<div class="container">
@foreach($products as $product)
<div class="col-md-3">
<div class="panel">
<div class="panel-heading">
{{ $product->name }}
</div>
<div class="panel-body">
{{ $product->description }}
</div>
<div class="panel-footer">
<a class="btn btn-info pull-right"
href="{{ url('product/cart/'.$product->id) }}"><i class="fa fa-
shopping-cart"></i> add to cart</a>
</div>
</div>
</div>
@endforeach
</div>

NOTE: Saya menggunakan Twitter Bootstrap sebagai CSS Framework,
itulah sebabnya saya menggunakan class container, panel-
heading, panel-body dan lain-lain.
Membuat shopping cart
Yap, akhirnya kita sampai juga pada bahasan utama kita. Jika
anda perhatikan view yang telah anda buat, didalamnya terdapat
syntax sebagai berikut:
<a class="btn btn-info pull-right" href="{{
url('product/cart/'.$product->id) }}"><i class="fa fa-shopping-
cart"></i> add to cart</a>
Perhatikan bahwa ketika tombol add to cart di-klik, maka
pengguna akan diarahkan ke route product/cart. Untuk itu mari
kita buat route tersebut, tambahkan kode dibawah ini pada
app/routes.php:
Route::get('product/cart/{id}', function($id){


});
Kemudian, pada route tersebut kita akan memasukan product yang
dimaksud ke dalam cache shopping cart, setelah itu kita tampilkan
isi dari shopping cart tersebut dalam bentuk tabel. Ubah kode
diatas menjadi sebagai berikut:
Route::get('product/cart/{id}', function($id){
$product = Product::find($id);

$id = $product->id;
$name = $product->name;
$qty = 1;
$price = $product->price;

$data = array('id' => $id,
'name' => $name,
'qty' => $qty,
'price' => $price,
'options' => array('size' =>
'large'));

Cart::add($data);

$cart_content = Cart::content(1);
return View::make('productcart')->with('cart_content',
$cart_content);
});
setelah itu, kita buat sebuah view baru productcart.blade.php.
<!-- app/views/productcart.blade.php -->

<div class="container">
<h4><i class="fa fa-shopping-cart"></i> cart</h4>
<hr>
<!-- Panel -->
{{ Message::success() }}
<div class="panel">
<div class="panel-heading">Cart</div>
<table class="table table-striped m-b-none text-sm">
<thead>
<tr>
<th width="8">No</th>
<th width="300">Product Name</th>
<th>Price</th>
<th width="100">Quantity</th>
<th width="200">Action</th>
</tr>
</thead>
<tbody>

<?php $i = 1; ?>
@foreach($cart_content as $cart)
<tr>
<td>{{ $i }}</td>
<td>{{ $cart->name }}</td>
<td>{{ $cart->price }}</td>
<td>{{ $cart->qty }}</td>
<td>
<a href="{{ url('cart/delete/'.$cart-
>rowid) }}">delete</a>
</td>
</tr>
<?php $i++; ?>
@endforeach

</tbody>
</table>
<div class="panel-footer">
<a href="{{ url('/dashboard') }}" class="btn btn-
white">Continue Shopping</a>
<a href="{{ url('cart/checkout') }}" class="btn btn-
info">Checkout</a>
</div>
</div>
<!-- / Panel -->
</div>

Menghapus item dari dalam shopping cart
Jika anda perhatikan view yang telah anda buat diatas, akan
terdapat link delete yang mengarah ke route cart/delete/{id}. Untuk
itu, mari kita buat route tersebut. Tambahkan syntax berikut pada
app/routes.php:
Route::get('cart/delete/{id}' , function(){
Cart::remove($id);
return View::make('productcart')->with('cart_content',
$cart_content);
});
Perhatikan bahwa sebuah item dalam cart bisa dihapus
berdasarkan rowid yang dimilikinya.
Melakukan checkout
Untuk melakukan checkout, kita akan membuat sebuah route
sebagai berikut:
Route::get('cart/checkout' , function(){

$formid = str_random();
$cart_content = Cart::content(1);

foreach ($cart_content as $cart) {

$transaction = new Transaction();

$product = Product::find($cart->id);

$transaction->product_id = $cart->id;
$transaction->form_id = $formid;
$transaction->qty = $cart->qty;
$transaction->total_price = $cart->price * $cart-
>qty;
$transaction->status = 'unpaid';

$transaction->save();

}



Cart::destroy();

echo "Checkout berhasil";
});
Perhatikan kode diatas, pada saat melakukan checkout, kita akan
memindahkan semua data yang ada pada cart ke dalam sebuah
tabel bernama transactions. Dengan demikian, jika kita melakukan
checkout sekarang, maka akan terjadi error karena tabel
transactions masih belum kita buat. Untuk membuat tabel
transactions, gunakan migrasi sebagai berikut:
Schema::create('transactions', function($table){
$table->increments('id')->unsigned();
$table->string('product_id');
$table->string('form_id');
$table->string('qty');
$table->string('total_price');
$table->string('status');
$table->timestamps();
});
Kemudian pada app/models tambahkan sebuah model
transaction.php sebagai berikut:
<?php
class Transaction extends Eloquent
{

}
?>
Sekarang, jika anda kembali mencoba melakukan checkout. Maka
data-data di dalam cart akan berhasil dimasukan ke dalam tabel
transaction.
semoga bermanfaat.

Cara melakukan manipulasi file image pada Laravel
Terkadang ketika meng-upload sebuah file image pada aplikasi web
yang kita buat, kita perlu melakukan image resizing, image crop,
menambahkan watermark dan sebagainya, agar gambar yang kita
upload bisa terlihat pas saat ditampilkan.
Package Laravel untuk melakukan image resizing
Untuk melakukan image resizing kita akan menggunakan sebuah
package bernama intervention/image. Untuk itu, tambahkan
"intervention/image": "1.*" di bagian require pada file composer.json
:
"require": {
"laravel/framework": "4.1.25",
"intervention/image": "1.*",
},
Setelah itu jalankan perintah composer update melalui command-
line. Tunggu beberapa saat hingga package terinstal. Sebagai
catatan, anda perlu terhubung ke internet ketika melakukan proses
ini.
Setelah proses selesai, kemudian buka file app/config/app.php
setelah itu pada bagian providers tambahkan kode berikut:
'Intervention\Image\ImageServiceProvider',
Kemudian, tambahkan pula kode berikut pada bagian aliases:
'Image' => 'Intervention\Image\Facades\Image',
Setelah itu, package intervention/image sudah siap anda gunakan.
Melakukan image crop dengan intervention/image
Berikut adalah cara melakukan crop image dengan menggunakan
intervention/image.
$file_path = 'uploads/image.png';

$img = Image::make($file_path);
$img->crop(500, 300);
$img->save($file_path);
perhatikan contoh diatas, misalnya kita mempunyai sebuah file
gambar dengan nama image.png dimana file tersebut terletak pada
folder public/uploads. Kemudian kita mempersiapkan file gambar
tersebut untuk diproses. Untuk itu, kita menggunakan perintah $img
= Image::make($file_path);. Setelah siap, gambar tersebut kemudian
di-crop dengan ukuran 500300. File gambar asli masih tersimpan
dengan ukuran sebenarnya, yang barusan kita crop adalah file
gambar kloningan dari gambar asli tersebut. Kita secara otomatis
mengkloningnya ketika menjalankan perintah $img =
Image::make($file_path);.
Setelah gambar hasil kloningan di crop, kemudian kita
menyimpannya dengan perintah, $img->save($file_path);. Karena
kita menyimpannya dengan path yang sama dengan gambar yang
asli, maka gambar aslinya akan ditimpa dan hilang. Seolah-olah
gambar asli tersebut yang kita crop. Jika, anda ingin gambar yang
asli tetap ada, silahkan simpan dengan path yang berbeda.
Melakukan image resizing
Selain melakukan crop, anda juga bisa melakukan resize dengan
cara sebagai berikut:
$file_path = 'uploads/image.png';

$img = Image::make($file_path);
$img->resize(500, 300);
$img->save($file_path);

Proses resize sangat mirip dengan crop, kita hanya mengganti $img-
>crop(500, 300); dengan $img->resize(500, 300);. Perbedaan resize
dengan crop adalah, ketika menggunakan crop gambar akan
dipotong menjadi berukuran sesuai dengan yang kita inginkan
pada contoh diatas ukuran yang kita gunakan adalah 500 x 300.
Karena, gambar tersebut dipotong, maka sebagaian dari gambar
akan hilang.
Sedangkan, pada resize, gambar tidak dipotong sehingga tidak ada
bagian gambar yang hilang. Namun demikian, apabila kita terlalu
memaksakan dalam melakukan resize maka gambar akan menjadi
terlihat gepeng. Misal, kita melakukan resize gambar berukuran
500 x 300 menjadi 500 x 50, tentu gambar akan menjadi terlihat
tidak normal. Jika anda ingin melakukan resize, usahakan dengan
dimensi yang sama, misal gambar berukuran 1000 x 500 di-resize
menjadi 500 x 250 (1000 x 500 = 2:1, 500 x 250 = 2:1 - sama-
sama 2:1).
Menambahkan Watermark
Selain itu, anda juga bisa menambahkan watermark pada file
gambar dengan menggunakan intervention/image. Caranya cukup
mudah:
$file_path = 'uploads/image.png';
$watermark = 'uploads/watermark.png';

$img = Image::make($file_path);
$img->insert($watermark);
$img->save($file_path);
NOTE: dokumentasi lebih lengkapnya bisa anda lihat disini :
http://image.intervention.io/
Semoga bermanfaat.


Menggunakan pagination pada Laravel
Sepertinya hampir setiap aplikasi berbasis web yang memiliki
fungsi untuk mengatur data memerlukan pagination ketika
menampilkan data yang cukup banyak.
Pagination adalah solusi yang cukup baik untuk mengatasi
kelebihan informasi. Saya pikir hampir semua orang tahu cara
menggunakan pagination.
Namun, untuk membuat sistem pagination dari awal akan sangat
memakan waktu dan juga membosankan. Ada banyak potongan
program yang harus anda tulis hanya untuk menampilkan
pagination sesuai dengan jumlah data dari database dan posisi
anda melihat data saat ini, kemudian menampilkannya pada
bagian bawah data.
Untungnya, pagination merupakan salah satu dari sekian banyak
fitur pada Laravel dimana kita bisa menggunakannya dengan lebih
mudah tanpa harus membuat dari awal. Membuat pagination dari
awal bisa menjadi mimpi buruk, sedangkan jika anda tidak
menggunakan pagination tentu kasihan pengguna anda jika harus
melihat terlalu banyak data dalam satu waktu.
Apa itu Pagination
Pagination adalah suatu cara menampilkan data yang banyak ke
dalam beberapa halaman. Ketika awal mula membuat sebuah
aplikasi web, anda mungkin tidak memerlukan pagination.
Namun, seiring berjalannya waktu dan semakin banyak data yang
harus ditampilkan, maka pagination akan menjadi sangat penting.
Jika anda menampilkan banyak data sekaligus dalam satu waktu,
maka hal itu akan memperlambat proses pengambilan data dari
database dan menyebabkan aplikasi menjadi lambat.
Dengan menggunakan pagination, hanya beberapa set data saja
yang akan diambil dari database dan ditampilkan langsung pada
aplikasi. Pada database, jumlah data dihitung dan dibagi-bagi
menjadi beberapa halaman tergantung dari berapa banyak yang
ingin anda tampilkan per halamannya. Kemudian jumlah
halaman diperkirakan dan dijadikan nomor halaman pada bagian
bawah tampilan data. Semoga anda mengerti (sudah mengerti
sebelumnya) tentang apa itu pagination.
Menggunakan method paginate pada Laravel
Seperti yang sudah saya jelaskan, Laravel bisa mempermudah
pembuatan pagination. Pada Eloquent maupun pada query
builder-nya Laravel, terdapat method paginate yang bisa
menentukan berapa jumlah data yang ingin ditampilkan, dimana
semuanya sudah di-handle oleh Laravel.
Misal, dengan menggunakan Eloquent anda bisa mengambil data
dari database dengan menggunakan method paginate sebagai
berikut:
$users = User::paginate(60);
atau jika menggunakan query builder:
$users = User::paginate(50);
Kemudian, pada bagian bawah dari data yang ditampilkan (di
bawah foreach), anda bisa menambahkan link pagination dengan
cara sebagai berikut:
{{ $users->links(); }}
Contoh kode lengkap yang bisa anda gunakan untuk membuat
pagination adalah sebagai berikut:
routes.php
Route::get('/', function()
{
$products = Product::paginate(50);
return View::make('tampilkan')->with('products', $products);
});
views/tampilkan.blade.php
@foreach($products as $product)
<tr>
<td>{{ $product->name }}</td>
<td>{{ $product->price }}</td>
<td>{{ $product->stock }}</td>
<td>
{{ Link::edit('product/edit/'.$product->id) }} |
{{ Link::delete('product/delete/'.$product->id) }}
</td>
</tr>
@endforeach

{{ $products->links() }}
Mudah bukan? dengan menggunakan Laravel pembuatan
pagination bisa semudah itu. Namun, mungkin ada kalanya anda
perlu untuk mengubah tampilan pagination tersebut supaya sesuai
dengan keinginan anda, misalnya supaya sesuai dengan CSS yang
telah anda buat. Anda bisa melakukannya dengan cara membuat
custom pagination caranya akan saya jelaskan pada bagian
dibawah ini.
Membuat Custom Pagination
Untuk membuat custom pagination pertama-tama anda buat sebuah
folder baru, pada app/views. Misal, folder tersebut anda beri nama
structure. Anda boleh memberi nama lain jika anda mau. Setelah
itu, pada folder tersebut buat sebuah file baru bernama
pagination.blade.php. Contoh isi file tersebut adalah sebagai
berikut:
<?php

@if ($paginator->getLastPage() > 1)
<ul class="ui pagination menu">
<a href="{{ $paginator->getUrl(1) }}"
class="item{{ ($paginator->getCurrentPage() == 1) ? ' disabled' : ''
}}">
<i class="icon left arrow"></i> Previous
</a>
@for ($i = 1; $i <= $paginator->getLastPage(); $i++)
<a href="{{ $paginator->getUrl($i) }}"
class="item{{ ($paginator->getCurrentPage() == $i) ? ' active' : '' }}">
{{ $i }}
</a>
@endfor
<a href="{{ $paginator->getUrl($paginator->getCurrentPage()+1) }}"
class="item{{ ($paginator->getCurrentPage() == $paginator-
>getLastPage()) ? ' disabled' : '' }}">
Next <i class="icon right arrow"></i>
</a>
</ul>
@endif
?>
Silahkan anda ubah kode diatas sesuai dengan kebutuhan anda.
Misalnya, mengubah nama class dan lain-lain. Setelah itu, buka
file app/config/view.php, lalu
ubah key pagination menjadi sebagai berikut:
'pagination' => 'structure/pagination'
Dengan cara seperti itu, ketika anda menuliskan $products->links()
, maka yang ditampilkan bukan lagi pagination bawaan dari
laravel, tetapi pagination yang barusan anda buat. Selamat
mencoba!

Anda mungkin juga menyukai