cara
membuat
aplikasi
CRUD
sederhana
dengan
//------------------------------------------------------------------------------------------------------------//
<?php use Illuminate\Database\Migrations\Migration;
Schema::create('books', function($table){
$table->increments('id');
$table->string('title')->unique();
$table->string('author');
$table->string('description');
$table->string('price');
$table->timestamps();
});
?>
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
</head>;
<body>
@yield('content')
{{ HTML::script('js/jquery.min.js') }}
{{ HTML::script('js/bootstrap.js') }}
</body>
</html>
@extends('layout')
@section('content')
Hello, Semua form akan ditempatkan disini!
@stop
extends
dari
file
layout.blade.php
dengan
menggunakan
@extends('layout')
@section('content')
<div class='container'>
{{ Form::open()}}
{{Form::label('title', 'Title') }}
{{Form::label('author', 'Author') }}
{{Form::label('description', 'Description') }}
{{Form::label('price', 'Price') }}
{{ Form::close() }}
</div>
@stop
Route::get('newbook', function()
{
return View::make('newbook');
});
Akses route tersebut melalui browser, maka akan tampil form seperti
berikut ini:
mari
kita
buat
Model
dan
Controller
untuk
<?php
?>
<?php
$book->title
$book->author
= Input::get('title');;
= 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
Form::open()
}}
file
app/views/newbook.blade.php
menjadi
'BookController@store'))
}}.
{{
ubah
Form::open(array('action'
Dimana
{{
=>
BookController@store
kita
menggunakan
telah
Laravel.
membahas
Yaitu
mengenai
dengan
cara
membuat
Create
membuat
Model,
Membuat route.
Membuat looping.
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();
});
Route::get('booklist', function(){
$books = Book::all();
return View::make('listbook')->with('booksdata', $books);
});
@extends('layout')
@section('content')
<!-- data akan ditampilkan disini -->
@stop
@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
http://lrv.dev/booklist
http://localhost/booklist
Bersambung
@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
buat.
Untuk
itu,
tambahkan
route
sebagai
berikut
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
itu,
pada
membuat
folder
@section('content')
<div class='container'>
<h3>Edit book</h3>
view
app/views
{{ Form::open() }}
{{Form::hidden('id', $book->id)}}
{{Form::label('title', 'Title') }}
{{Form::label('author', 'Author') }}
{{Form::label('description', 'Description') }}
{{Form::label('price', 'Price') }}
{{ 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
pada BookController:
public function update()
{
$id
= Input::get('id');
$book = Book::find($id);
$book->title
$book->author
= Input::get('title');
= Input::get('author');
$book->description = Input::get('description');
$book->price
$book->save();
= Input::get('price');
fungsi
update
}
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.
Pada
kesempatan
kali
ini
kita
akan
membuat
tambahkan link
delete di
sebelah
link
edit
dengan
cara
@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
link_to_action('BookController@delete',
kita
menambahkan
'delete',
{{
array($book->id))}}
ini
disebabkan
kita
belum
diperlukan.
Oleh
belum
dibuat,
untuk
itu
akan
dihapus.
Perhatikan
bahwa
kode
return
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
command line:
@if(Session::has('pesan'))
<div class="alert alert-success">{{ Session::get('pesan') }}</div>
@endif
halaman
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();
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
</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!');
}
akan
tampil
tulisan
login
berhasil.
Namun,
jika
Buat
sebuah
controller
DashboardController:
<?php
class DashboardController extends BaseController
{
public function index(){
return View::make('dashboard');
}
baru
bernama
}
?>
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(){
@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" datatoggle="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-navbarcollapse-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
@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
Kemudian,
memasukan
jika
kita
http://localhost/dashboard
yang
belum
seharusnya
sama
login
saat
dan
pengguna
registrasi.
mengakses
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!
},
Setelah itu, jalankan perintah composer update pada commandline. 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
Sebenarnya,
untuk
membuat
migration
anda
juga
bisa
Laravel,
setiap
model
(yang
merupakan
turunan
dari
mengambil
data.
Dengan
menggunakan
relationship
kita
bisa
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
/**
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('articles');
}
?>
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\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
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
Route::get('/', function()
{
$author = Author::find(1); //Temukan author dengan id = 1
$author->save();
});
kita
melakukan
create.
Bedanya
kita
menggunakan
Route::get('/', function()
{
$author = Author::find(1); //Temukan author dengan id = 1
$author->delete();
});
ke
dalam
database.
Kemudian
ubah
route
diatas
});
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
}
?>
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 {
} ?>
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
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
whereUmur,
jika
berdasarkan
kolom
jabatan
echo $article->author->username;
echo $article->author->bio;
});
foreach($articles as $article){
echo $article->author->username;
echo ' menulis artikel berjudul ';
echo $article->title;
}
});
Perhatikan,
bahwa
cara
diatas
akan
berjalan
sangat
lambat
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
menggunakan
berhubungan
shopping
cart,
dengan
barang
toko
yang
online.
akan
Dengan
dibeli
oleh
tersebut
tidak
hilang.
Data
barang
tersebut
kemudian
akan
membuat
menambahkan
composer.json
shopping
sebuah
dan
cart
package
tambahkan
pada
baru.
Laravel
Untuk
itu,
kita
buka
"gloudemans/shoppingcart":
akan
file
"dev-
}
?>
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:
<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 fashopping-cart"></i> add to cart</a>
</div>
</div>
</div>
@endforeach
</div>
sebabnya
saya
menggunakan
class
container,
panel-
});
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
$name
= $product->id;
= $product->name;
$qty
= 1;
$price
= $product->price;
$data = array('id'
=> $id,
'name'
=> $name,
'qty'
=> $qty,
'price'
=> $price,
'options'
'large'));
Cart::add($data);
$cart_content = Cart::content(1);
return View::make('productcart')->with('cart_content',
$cart_content);
});
<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 btnwhite">Continue Shopping</a>
<a href="{{ url('cart/checkout') }}" class="btn btninfo">Checkout</a>
</div>
</div>
<!-- / Panel -->
</div>
bahwa
sebuah
item
dalam
cart
bisa
dihapus
$formid
= str_random();
$cart_content = Cart::content(1);
$product = Product::find($cart->id);
$transaction->product_id = $cart->id;
$transaction->form_id
$transaction->qty
= $formid;
= $cart->qty;
$transaction->save();
Cart::destroy();
= 'unpaid';
sekarang,
transactions
masih
maka
akan
belum
kita
terjadi
buat.
error
Untuk
karena
tabel
membuat
tabel
pada
app/models
tambahkan
}
?>
sebuah
model
bernama
intervention/image.
Untuk
itu,
tambahkan
Tunggu
beberapa
saat
hingga
package
terinstal.
Sebagai
=> 'Intervention\Image\Facades\Image',
$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
ketika
menjalankan
perintah
$img
Image::make($file_path);.
Setelah
gambar
hasil
kloningan
di
crop,
kemudian
kita
$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
$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.
untuk
mengatur
data
memerlukan
pagination
ketika
adalah
solusi
yang
cukup
baik
untuk
mengatasi
pagination.
yang
harus
anda
tulis
hanya
untuk
menampilkan
web,
anda
mungkin
tidak
memerlukan
pagination.
anda
tampilkan
per
halamannya.
Kemudian
jumlah
pagination.
Pada
Laravel,
terdapat
builder-nya
Eloquent
method
maupun
paginate
pada
query
yang
bisa
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(); }}
{{ $products->links() }}
Mudah
bukan?
dengan
menggunakan
Laravel
pembuatan
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
pagination.blade.php.
buat
Contoh
isi
sebuah
file
file
tersebut
baru
adalah
bernama
sebagai
berikut:
<?php
app/config/view.php,
lalu
tetapi pagination
yang
barusan
anda
buat.
Selamat