• Tidak ada hasil yang ditemukan

CRUD Laravel

N/A
N/A
Protected

Academic year: 2021

Membagikan "CRUD Laravel"

Copied!
81
0
0

Teks penuh

(1)
(2)

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.

(3)

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:

(4)

//---//

<?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'); }

(5)

}

?>

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>

(6)

<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:

(7)

@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')

(8)

<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')) }}

(9)

</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:

(10)

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

(11)

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(){

(12)

$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:

(13)

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).

(14)

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:

(15)

$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:

(16)

@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>

(17)

</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:

(18)

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:

(19)

@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

(20)

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

(21)

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'>

(22)

{{ 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'))}}

(23)

{{ 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();

(24)

}

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,

(25)

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>

(26)

@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:

(27)

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‟.

(28)

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) {

(29)

$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:

(30)

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

(31)

{{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:

(32)

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');

(33)

$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');

(34)

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') }}

(35)

{{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!');

(36)

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'); }

(37)

} ?>

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

(38)

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>

(39)

<! 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

(40)

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') }}

(41)

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": {

(42)

},

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.

(43)

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:

(44)

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

(45)

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 {

(46)

* 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() {

(47)

} } ?> <?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');

(48)

}); }

/**

* 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

(49)

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

(50)

{

$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; } });

(51)

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(); });

(52)

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() {

(53)

$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;

(54)

$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.

(55)

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() {

(56)

}

} ?>

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; }

(57)

});

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;

(58)

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:

(59)

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

(60)

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:

(61)

'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.

(62)

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:

(63)

<!-- 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>

(64)

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

(65)

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); });

(66)

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)

(67)

<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>

(68)

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);

(69)

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 = >price * $cart->qty;

$transaction->status = 'unpaid';

$transaction->save();

}

Cart::destroy();

echo "Checkout berhasil"; });

(70)

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 {

} ?>

(71)

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.*", },

(72)

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

(73)

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 500×300. 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);

(74)

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:

(75)

$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

(76)

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

(77)

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:

(78)

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() }}

(79)

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>

(80)

@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{{ (>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!

(81)

Referensi

Dokumen terkait

Digunakan untuk membuat paket data yang disimpan dalam array of byte dan dikirim ke port tertentu...

Digunakan untuk membuat paket data yang disimpan dalam array of byte dan dikirim ke port tertentu...

“Basis data adalah suatu data yang terhubung (interrelated data) yang disimpan secara bersama-sama pada suatu kerangkapan data (controller redundancy) dengan

Setelah model dan controller telah dibuat langkah selanjutnya adalah membuat view .Tahap awal dalam membuat view adalah membuat folder baru pada path

Controller dalam CakePHP berfungsi untuk menerima data dari Post Model dan data akan dimanipulasi di Controller sebelum di hantar ke View. Fungsi Scaffold digunakan untuk

Tujuannya adalah untuk membantu mengembangkan aplikasi web dengan model view controller (MVC) kemampuan dalam upaya.. untuk membuat pengembangan, pemeliharaan dan pengujian

CodeIgniter adalah aplikasi open source berupa framework dengan model MVC (Model, View, Controller) yang di fungsikan untuk membuat sebuah website dinamis berbasis

kemudian dipakai untuk membuat file form tampilan untuk mengisi data dan file view untuk menampilkan data dengan menggunakan form generator. Table generator bekerja