Download - Rekayasa Aplikasi Internet 2017 · PDF filePemrograman Berorientasi Obyek dengan PHP dan Laravel 3. ... JavaScript dan CSS. ... (website tutorial,

Transcript

Rekayasa Aplikasi Internet 2017

Pengembangan Aplikasi Web dengan Laravel

[email protected]

Garis Besar

1. Laravel, Instalasi dan Struktur Aplikasinya

2. Pemrograman Berorientasi Obyek dengan PHP dan Laravel

3. Router dan Controller

4. View dan Blade Templating

5. Model, Migrasi dan Seeding

6. Operasi CRUD

1. Laravel, Instalasi dan StrukturAplikasinya

Apa itu Composer?

• Composer adalah suatu software yang mengelola PHP dependencies, tepatnya suatu sistem manajemen paket dan pemuatotomatis (auto loader) paket/kelas yang dibutuhkan.

• Composer memungkinkan kita untuk mendeklarasikan pustaka(library) yang dibutuhkan oleh proyek kita dan composer akanmengelolanya (install/update) untuk kita.

• Laravel adalah suatu framework PHP Full-Stack (sisi front-end danback-end).

• Laravel punya banyak fitur seperti manajemen sesi (session) manajemen basis data, Composer dan banyak lainnya.

• Software Framework adalah platform re-usable universal untukmengembangkan aplikasi, produk dan solusi perangkat lunak.

Apa itu Laravel?

• Laravel mengikuti pola arsitektural model-view-controller (MVC) yang mengharuskan pemisahan antara “business logic” dari input dan bagian presentasi (tampilan, view) yang diasosiasikan dengansuatu graphical user interface (GUI).

• Pola rancangan MVC sangatlah popular dalam dunia pengembanganaplikasi web.

MVC dan Laravel

• Model berbasiskan pada item real-world seperti orang, bank account, atau product tertentu.

• Misal Jika kita membangun suatu blog, modelnya mungkinberupa post dan comment.

• Model biasanya permanen dan akan disimpan di luar aplikasi, seringnya di dalam basis data.

• Suatu model lebih dari sekedar data; Ia memberlakukan semua aturan bisnis yang berlaku untuk data tersebut.

• Sebagai contoh, jika diskon tidak boleh diterapkan pada pesanan kurang dari Rp. 100.000, model ini akan memberlakukan batasan itu.

• Model bertindak sebagai suatu gatekeeper sekaligus data store.

Model

• Representasi visual dari suatu model, sesuai dengan konteks yang diberikan.

• Biasanya berupa markup yang oleh framework dirender ke browser, sepertiHTML yang merepresentasikan blog post.

• Layer view bertanggungjawab untuk membangkitkan suatu user interface, normalnya berdasarkan pada data dalam model.

• Sebagai contoh, sebuah toko online akan memiliki daftar produk yang akan ditampilkan di layar katalog. Daftar ini akan dapat diakses melalui model, namun akan menjadi view (tampilan) yang mengakses daftar dari model dan memformatnya untuk pengguna akhir.

• Meskipun view dapat memberikan pengguna dengan berbagai cara untuk memasukkan data, view itu sendiri tidak pernah menangani data yang masuk. Urusan view dilaksanakan saat data akan ditampilkan.

View

• controller - Sang koordinator yang menyediakan link antara view danmodelnya.

• Controller bertanggungjawab memroses input, bertindak terhadapmodel, dan memutuskan tindakan apa yang harus dikerjakan, seperti merender suatu view atau mengalihkan ke halaman lain.

• Pada aplikasi blog, controller mungkin mencari komentar terbaru untuk sebuah postingan (model) dan meneruskannya ke view untuk rendering (ditampilkan ke browser).

Controller

Komponen Laravel: Pola MVC

Framework PHP Lainnya

• Ada banyak framework PHP lain:

▪Symfony▪Yii Framework▪Codeigniter▪CakePHP▪Zend Framework▪Aura …

Sekilas Instalasi

• Jadi, rencana umum instalasi kita adalah menginstall Laravel dancomposer pada mesin lokal.

• Kita dapat mengembangkan aplikasi di situ, menjalankan web server pada mesin lokal.

• Tampilkan file-file tersebut pada browser lokal.

Instalasi Laravel

• Langkah 1:

Buka www.laravel.com

• Langkah 2:

Klik pada Documentation

Instalasi Laravel

• Pertama, Install Composer

• Langkah 3:

Buka www.getcomposer.org

• Langkah 4:

Klik tombol Download

• Langkah 5:

Klik dua kali file yang telah didownload: Composer-Setup.exedan ikuti langkah-langkah instalasinya.

Kebutuhan Server Laravel 5.5

• PHP >= 7.0.0

• OpenSSL PHP Extension

• PDO PHP Extension

• Mbstring PHP Extension

• Tokenizer PHP Extension

• XML PHP Extension

Instalasi Laravel

• Buka Command Line (cmd)

• Run as Administrator

• Silakan pindah ke direktori dokumen web, misalnya c:\xampp\htdocs

• Jalankan composer untuk otomatisasi ketergantungan global:

composer global require "laravel/installer"

Ketergantungan PHP

composer global require "laravel/installer“

• Itu mengaktifkan PHP dependency. Diperlukan beberapa menituntuk menginstall PHP dependency.

• Kemudian composer akan membangkitkan “Autoload Files”.

Membuat Proyek Baru

• Langkah berikutnya adalah membuat proyek baru.

• Perintah di bawah ini dapat digunakan untuk membuat proyek laravel.

composer create-project --prefer-dist laravel/laravel rai2017

Sebutkan nama proyek yang akan dibuat, misalnya rai2017

Server Pengembangan Lokal

• Setelah instalasi suatu proyek baru, Laravel membuatkan key untukaplikasi tersebut.

• Untuk memeriksa apakah Laravel sudah terinstall dengan benar, gunakan perintah php artisan serve.

php artisan serve

• Perintah ini akan memulai suatu server untuk pengembanganaplikasi PHP pada URL http://localhost:8000

Struktur File dariLaravel

Struktur File dari Laravel (1/3)

• app: direktori yang mengandung kerja utama aplikasi kita, inilahfolder dimana kita menempatkan semua model, controller dankelas lainnya.

• bootstrap: digunakan untuk mem-boostrap / men-startup Laravel.

• config: dimana konfigurasi dari aplikasi berada.

• databases: dimana migrasi dan seed disimpan.

• public: tempat meletakkan bagian dari aplikasi yang dapat diaksesoleh publik. Direktori ini juga menjadi rumah bagi aset lain sepertiimages, JavaScript dan CSS.

Struktur File dari Laravel (2/3)

• resource: inilah dimana semua view berada. Banyak file yang dapatdilihat pengguna front-end, seolah struktur dari aplikasi, terlihat di dalam folder ini.

• storage: dimana semua file cache dan log berada. Semuanya built-in dengan Laravel misalnya log error dan access.

• test: tergantung, jika anda menggunakan jenis framework unit testing, maka kita dapat meletakkan semua test dalam folder ini.

• vendor: dimana semua pustaka pihak ketiga berada, paket composer di install di sini.

Struktur File dari Laravel (3/3)

• File Composer.json: file untuk menentukan paket composer apa yang akan dimasukkan ke dalam aplikasi.

• File .env: file yang berisi konfigurasi koneksi ke suatudatabase dan beberapa konfigurasi lain.

• Routes: Di dalam folder inilah semua rute untuk aplikasiberada: web.php, api.php, console.php dan channels.php

• File Web.php: file dimana di dalamnya semua rute(standard) didefinisikan

Laragon

Download

Zeal

Membuat Proyek di Laragon

Vue.JS

PostgreSQL

2. Pemrograman BerorientasiObyek dengan PHP dan Laravel

Obyektif

MVC sebagaimana yang dianut oleh Laravel adalah OO, sehingga…

• Frameworks Web & konsep pentingnya

• Contoh Framework web

• Pola rancangan perangkat lunak Model-View-Controller

• Perbandingan procedural vs OO

• Aspek dari OO dalam PHP • Kelas Classes • Properti Properties • Metode Methods • Inheritance • Overriding

Framework Web

• Mendukung dan memudahkan pengembangan• dynamic websites • web applications • web services

• Menyederhanakan tugas-tugas pengembangan umum seperti• AJAX • caching • data validation • database access • debugging • error handling • security • session management • templating • testing • URL mapping • user management

• Memperkenalkan code reuse (penggunaan ulang kode aplikasi)

• Frameworks merupakan contoh dari rancangan interface, bukan rancangan implementasi.

Beberapa Framework Web

• ASP.NET (terutama menggunakan C# atau VB, sedikit J#)

• Flask dan Django (Python)

• Drupal (CMS sebagai framework dan Drupal 8 menggunakan komponensymfony)

• Ruby

• WordPress??????

• Laravel, Yii, CodeIgniter, CakePHP, Zend, Symfony adalah beberapaframework PHP

• Ada banyak (ratusan?) framework tersebar mulai ASP.NET, C++, Java, Perl, PHP, Python s.d Ruby, dll.

Lihat di http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks

Beberapa Framework Web

Aplikasi Itu CRUD

• Persistent storage membutuhkan CRUD • Create

• Read (Retrieve)

• Update

• Destroy (Delete)

• Dalam istilah SQL: INSERT, SELECT, UPDATE & DELETE

• Program komputer sedikit banyak tapi CRUD

• Sistem informasi berbasis kertas atau computer adalah CRUD

• Arsitektur software MVC mencoba untuk memudahkan ataumengotomatiskan implementasi CRUD

Pola Rancangan Software Model-View-Controller

• Model • Merepresentasikan perilaku dan data dari aplikasi• Menyediakan informasi untuk views (R dari CRUD) • Mengubah status ketika diinstruksikan oleh controller (CUD atau CRUD) • Mengimplementasikan CRUD

• View • Membawa (mengubah) model ke dalam antarmuka pengguna (user interface)• Suatu model dapat mempunyai view berbeda untuk tujuan berbeda• Views menerjemahkan user interface ke CRUD

• Controller • Mengambil input dari pengguna• Menginisiasi request ke model • Menginstruksikan view untuk menerjemahan response dari model • Controller menginisiasi CRUD

Mengapa MVC?

• Aplikasi menjadi lebih maintainable

• Modular

• Pengembangan Cerdas (Agile)

PHP Prosedural vs OO

• PHP Prosedural• Sebagian besar tutorial pengantar adalah prosedural• Banyak materi kuliah yang berkaitan dengan PHP, biasanya prosedural• Quick(?) dan Dirty! • Kode procedural adalah linier atau sequensial• Skrip kecil• Sulit untuk di-maintain • Coding untuk implementasi, sulit menerapkan reuse

• PHP Berorientasi Obyek• Laravel adalah OO • OO adalah modular • Aplikasi besar• Aplikasi enterprise • Coding untuk interface, mudah dalam code reuse

Kelas adalah Template

<?php class SimpleClass {

// deklarasi propertipublic $var = ‘suatu nilai default'; // deklarasi metodepublic function displayVar() {

echo $this->var; }

}

?>

Perhatikan pemanfaatan dari pseudo-variable $this

Obyek adalah Instance

<?php

$a = new SimpleClass();

$b = new SimpleClass();

$c = new SimpleClass();

?>

Properti Mendeskripsikan Instance

<?php class SimpleClass {

// deklarasi propertipublic $var = 'a default value'; // deklarasi metodepublic function displayVar() {

echo $this->var; }

} $a = new SimpleClass(); $a->var = "qwerty"; // lewatkan ke$whatever = $a->var; // ambil dari

?>

Dapat memberi ke dan menerima dari suatu properti dengan notasi ->.

Metode adalah Tindakan atau Operasi

<?php class SimpleClass {

// property declaration public $var = 'a default value'; // method declaration public function displayVar() {

echo $this->var; }

} $a = new SimpleClass(); $a->displayVar(); // the line above is equivalent to the line below echo $a->var;

?>

Dapat menggunakan metode dengan notasi ->.

Menurunkan dan Mengubah Metode

<?php class foo {

public function printItem($string) { echo 'Foo: ' . $string . PHP_EOL; } public function printPHP() { echo 'PHP is great.' . PHP_EOL; }

}

class bar extends foo { //bar turunan dari foopublic function printItem($string) { echo 'Bar: ' . $string . PHP_EOL; }

}

$foo = new foo(); $bar = new bar(); $foo->printItem('baz’); // Output: 'Foo: baz' $foo->printPHP(); // Output: 'PHP is great' $bar->printItem('baz’); // Output: 'Bar: baz' $bar->printPHP(); // Output: 'PHP is great'

?>

Operator Resolusi Lingkup (::)

• Operator resolusi lingkup (berbentuk double colon) adalah suatutoken yang memungkin akses ke properti atau metode static, constant dan override dari suatu kelas.

• Sering digunakan untuk mengakse metode dari kelas yang diimporttanpa pembuatan instance dari kelas tersebut.

use Illuminate\Support\Facades\Cache;

Route::get('/cache', function () {

return Cache::get('key');

});

Lingkup Variabel dalam PHP

• Lingkup variabel adalah konsteks dimana variabel itu didefinisikan<?php $a = 1; include 'b.inc'; ?>

• Variabel $a akan tersedia di dalam skrip b.inc yang di-include-kan.<?php

$a = 1; /* lingkup global */ function test() {

echo $a; /* merujuk ke variabel lingkup lokal */ } test();

?>

• Skrip ini tidak mengeluarkan apapun karena pernyataan echo mengacu ke versilokal dari variabel $a dan belum diberikan nilai dalam lingkup ini.

http://php.net/manual/en/language.variables.scope.php <-- Manual PHP!

Menggunakan global

<?php $a = 1; $b = 2; function Sum() {

global $a, $b; $b = $a + $b;

}

Sum(); echo $b;

?>

• Skrip akan mengeluarkan 3. Dengan mendeklarasikan $a dan $b global di dalamfungsi, semua referensi ke salah satu variabel akan mengacu ke versi globalnya.

http://php.net/manual/en/language.variables.scope.php <-- lihat manual PHP

Menggunakan $GLOBALS Bukan global

• Cara kedua untuk mengakses variabel dari lingkup global adalah menggunakanarray $GLOBALS khusus yang sudah didefinisikan PHP. Contoh sebelumnya dapatditulis ulang menjadi: <?php

$a = 1; $b = 2; function Sum() {

$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; } Sum(); echo $b;

?>

• Array $GLOBALS adalah asosiatif dengan nama variabel global menjadi key dan isidari variabel tersebut sebagai elemen value-nya. Perhatikan bagaimana$GLOBALS ada di lingkup mana pun, ini karena $GLOBALS bersifat superglobal.

http://php.net/manual/en/language.variables.scope.php <-- Manual PHP!

Variabel Statis

• Suatu variabel statik hadir hanya dalam lingkup lokal fungsi, tetapi tidakkehilangan nilainya saat eksekusi program meninggalkan skop ini.

• Fungsi sebelah kiri tak jelas manfaatnya karena setiap kali dipanggil iamengubah $a menjadi 0 dan mencetak 0.

• Fungsi sisi kanan, $a diinisiasi hanya pada panggilan pertama dan setiapkali dipanggil fungsi test() akan mencetak nilai dari $a dan menaikkannya.

<?php // useless function (local) function test() {

$a = 0; echo $a; $a++;

} ?>

<?php // useful function (static) function test() {

static $a = 0; echo $a; $a++;

} ?>

Bacaan Lanjutan: Dokumentasi dan Tutorial

• http://en.wikipedia.org/wiki/Model-View-Controller

• http://en.wikipedia.org/wiki/Create,_read,_update_and_delete

• http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks

• http://www.php.net/manual/en/language.oop5.php (bahasan tentang OOP)

• http://www.killerphp.com/tutorials/object-oriented-php/ (website tutorial, tersedia pula bentuk pdf dan video)

• https://laravel.com/docs/5.4

• https://getcomposer.org/

• https://laracasts.com/ - belajar dari video

• https://laravel.com/docs/5.4/artisan

3. Laravel: Router dan Controller

ROUTES

Setup Routing

• Routing memungkinkan kita membuat path URL sendiri. Berdasarkanpada path itulah eksekusi suatu closure atau controller diarahkan!

• Pembuatan Rute:

• Mendefinisikan suatu rute: panggil nama statis Route:: diikutidengan post atau get (metode atau aksi HTTP, ada juga put dandelete).

• Tentukan path (setelah URL root) yang nantinya akan dicocokkandan memicu pekerjaan lanjutan (ditetapkan dalam closure ataucontroller).

• Contoh pemanggilan: localhost:8080/hello (memanggil rute hello)

Bagaimana Caranya?

• Buka file routesweb.php. Di sinilah semua rute dari aplikasiditulis.

• Perhatikan, di sana sudah ada satu rute get, hanya /, default, rutedari root (home, beranda) dari aplikasi.

• Coba tambahkan rute hello ke dalam file ini:

Route::get(‘hello’, function(){echo “Hello all, welcome to RAI 2017 class…”;

});

• Panggil di browser: localhost:8000/hello

• Misalnya kita ingin melewatkan parameter nama

Route::get(‘hello/{nama}’, function($nama){

echo “Hello ” . $nama . “, apa kabar?”;

});

• localhost:8000/hello/sholihah

• Katakanlah ada suatu ID, kita mungkin dapat mengambil informasitertentu dari dalam database berdasarkan ID ini.

Mengirimkan Parameter ke Rute

• Parameter Rute Dasar

Route::get(‘user/{id}’, function($id) {

return ‘User ‘ . $id;

});

Catatan: Parameter rute tidak boleh mengandung karakter -. Gunakan underscore (_) sebagai gantinya.

Parameter Rute

• Parameter Rute Opsional

Route::get(‘user/{nama?}’, function($nama = null) {

return $nama;

});

Parameter Rute

• Parameter Rute Opsional dengan Nilai Default

Route::get(‘user/{nama?}’, function($nama = ‘Joko’) {

return $nama;

});

Parameter Route

Jenis Route

• Ada empat jenis dasar dari rute, sesuai dengan metode HTTP yang umum diterapkan.

• Route::post()

• Route::get()

• Route::put()

• Route::delete()

Route::post()

• Rute post digunakan untuk membuat suatu item baru.

• Misal kita membuatkan suatu rute bernama ‘test’.

Route::post(‘test’, function(){

echo “POSTED”;

});

• Sehingga jika dapat memanggilnya: http://localhost:8000/test

Route::get()

• Rute get membaca atau mengambil suatu item.

Route::get(‘test’, function(){

echo “GET”;

});

• Digunakan saat pengguna mengirim request tanpa data atau men-submit data dari suatu form.

Route::get()

• Rute get membaca suatu item

Route::get(‘test’, function(){

echo ‘<form action=“test” method=“post”>’;

echo ‘<input type=“submit” value=“submit” >’;

echo ‘<input type=‘hidden’ name=‘_token’ value=“’ . csrf_token() . ’” >’;

echo ‘<input type=‘hidden’ name=‘_method’ value=“PUT/DELETE” >’;

echo ‘</form>’;

});

• Digunakan saat pengguna mengirim request tanpa data atau men-submit data dari suatu form.

Hidden input memanggiltoken, ini cara pengamananform, builtin dalam Laravel

Value akan menjadi fungsi helper

Route::put()

• Rute put mengupdate suatu item.

Route::put(‘test’, function(){

echo “PUT”;

});

Route::delete()

• Rute delete menghapus suatu item.

Route::delete(‘test’, function(){

echo “DELETED”;

})

Route Closure

• Sebelumnya, saat membuat suatu rute get baru, misalnya test123. kita memanfaatkan closure untuk mewujudkan apa yang diinginkandengan rute tersebut.

• Kita juga dapat menggunakan controller, misalnya TestControllerdan metode tujuannya.

Route::get(‘test123’, ‘TestController@index’);

• Tidak perlu semua kode ditulis di dalam rute. Cukup sebutkan suatucontroller dan nama metode di dalamnya yang harus dijalankan saatrute ini dipanggil.

Route Closure

Route::get(‘test123’, function(){

echo “test”;

})

• Dengan pemanfaatan controller, berubah menjadi:

Route::get(‘test123’, ‘TestController@index’);

• Laravel memudahkan proteksi aplikasi dari cross-site request forgeries(pemalsuan permintaan lintas lokasi), salah satu malicious exploitdimana perintah yang tidak sah dikerjakan atas nama pengguna yang terotentikasi.

• Laravel secara otomatis membangkitkan suatu “token” CSRF untuksetiap sesi pengguna aktif yang dikelola oleh aplikasi. Token inidigunakan untuk menverifikasi bahwa pengguna terotentikasi adalahyang sesungguhnya membuat request ke aplikasi.

Proteksi CSRF

• Masukkan Token CSRF ke dalam suatu form (coba satu dari 3 cara ini)

<input type="hidden" name="_token"

value="<?php echo csrf_token(); ?>">

<input type=‘hidden’ name=‘_token’

value=“’ . csrf_token() . ’” >’;

<input type="hidden" name="_token"

value="{{ csrf_token() }}">

Proteksi CSRF

• Form HTML tidak mendukung metode PUT, POST atau DELETE. Sehingga ketika mendefinisikan rute PUT, POST atau DELETE yang dipanggil dari suatu form HTML, perlu ditambahkan suatu field _method tersembunyi ke dalam form tersebut.

• Nilai yang dikirim dengan field _method akan digunakan sebagaimetode request HTTP.

• Sebagai contoh:<form action="/foo/bar" method="POST">

<input type="hidden" name="_method" value="PUT/DELETE"> <input type="hidden" name="_token"

value="<?php echo csrf_token(); ?>"></form>

Metode di dalam Form

• Rute bernama memudahkan pembangkitan URL atau redirect ke rute khusus. Nama untuk suatu rute ditetapkan sebagai key dari array:

Route::get('user/profile', ['as' => 'profile', function() { //

}]);

• Dapat pula ditentukan nama-nama rute untuk aksi controller:

Route::get('user/profile', [ 'as' => 'profile', 'uses’ =>'UserController@showProfile' ]);

• Metode currentRouteName mengembalikan nama dari rute yang menanganicurrent request:

$name = Route::currentRouteName();

Rute Bernama

Perintah Route

php artisan route:list

• Perintah ini akan menampilkan semua rute dari aplikasi.

CONTROLLER

Controller

• Controller: Koordinator yang menyediakan link antara view danmodel.

• Controller bertanggungjawab untuk pemrosesan input, memanggilatau memerintahkan model, dan menentukan aksi apa yang sebaiknya dikerjakan, seperti menampilkan suatu view ataumeredirectnya ke halaman lain.

• Pada aplikasi blog misalnya, controller mungkin mencari komentarterakhir untuk suatu post (model) dan mengirimnya ke view untukditampilkan.

Controller di Laravel

• Dalam Laravel, semua Controllers disimpan dalam direktoriaapHttpControllers.

• Laravel menyediakan suatu controller dasar bernama Controller.php

• Semua controller Laravel harus meng-extend controller tersebut.

• Di dalam folder Controller, dapat dibuat folder lainnya agar beberapa controller tertata lebih baik.

Controller di Laravel

• Buka direktori appHttpControllersAuth

• Di dalam folder Auth, ada file bernama LoginController.php (iniadalah suatu controller otentikasi yang mengotentikasi penggunaexisting juga menangani registrasi pengguna)

Controller di Laravel

• Kita menuliskan sebagian besar kode aplikasi di dalam controller. Controller berurusan dengan pemrosesan data dan kendali aplikasi.

• Aplikasi mendapatkan route, kemudian menuju controller.

• Controller harus menentukan bagaimana menyelesaikan tugas. Jikaperlu data (dari database) maka panggil atau eksekusi modelnya.

Controller di Laravel

• Contoh: Validasi form:

• Mungkin diperlukan penggabungan beberapa string dll.

• Semua jenis pemrosesan data (logika penanganan data) didefinisikan di dalam Controller.

Pembuatan Controller

• Untuk membuat suatu controller buka terminal cmd dan jalankanperintah:

php artisan make:controller PagesController

• Perintah ini akan secara otomatis membuat controller bernamaPagesController di dalam folder appHttpControllers

Pembuatan Controller

• Telah dibuat PagesController untuk menangani semua halaman web.

• Kata Controller harus diletakkan di akhir nama controller dimulaidengan huruf besar C.

• Namespace hadir di dalam semua controller.

Pembuatan Controller

• Perintah untuk membuat controller

php artisan make:controller PagesController

• Perintah untuk membuat controller CRUD

php artisan make:controller PostController --resource

Namespace

• Namespace adalah suatu container atau kotak kecil.

• Apa yang dilakukannya?, hanya mengatakan bahwa kita berada didalam folder ini.

• Kita dapat bergerak dalam folder ini namun tidak dapat meninggalkannya.

Namespace App

• Root directory dari instalasi awal Laravel berisi beberapa folder.

• Direktori App : Aplikasi yang dibangun hidup dalam direktori app. Secara default, direktori ini di-namespace-kan di bawah App dandimuat otomatis oleh composer.

• Defaultnya, namespace dari aplikasi adalah App. Namunnamespace ini dapat diubah.

Fungsi Controller

• Di dalam Controller didefinisikan fungsi-fungsi (atau metode)

• Nama dari fungsi dimulai dengan aksi get, post, put atau delete. Karena itulah kita membuat fungsi getIndex()

• Setelah itu beritahukan route untuk menunjuk ke Controller ini, danmenggunakan fungsi pada Controller ini untuk memroses data.

Route::get(‘contact’, ‘PagesController@getContact’);

Fungsi Controller

• Sekarang di dalam PagesController didefinisikan 3 fungsi:

<?php

namespace App\Http\Controllers;

class PagesController extends Controller{

public function getIndex() { }

public function getAbout() { }

public function getContact() { }

}

getIndex()

public function getIndex() {

return view(‘pages/welcome’);

return view(‘pages.welcome’);

}

• Lebih baik menggunakan (.), lebih object oriented.

• Fungsi ini akan memanggil halaman welcome.blade.php yang tersimpan di dalam folder pages di dalam folder view.

getAbout()

• Melewatkan data dari controller ke view.

• Tugasnya adalah menentukan first name dan last name, kemudianmelewatkan nama lengkapnya ke dalam view.

• public function getAbout() {

$first = “Alex”;

$last = “John”;

$full = $first . “ ” . $last;

return view(‘pages.about’)->with(“fullname”, “$full”);

}

Melewatkan Data: with()

• Metode with(), memerlukan dua argumen.

• Argumen pertama adalah nama dari variable yang hendak diakses di dalam view, dalam contoh memanggilnya fullname.

• Argumen kedua adalah variabel yang dideskripsikan dalam fungsi.

with(“fullname”, “$full”);

• Buka resourceviewspagesabout.blade.php dan sisipkan kode{{ $fullname }} untuk menempatkan nilai dari variabel tersebut.

Melewatkan Data: Awalan Huruf Besar

• Cara lain (lebih mudah?) untuk melewatkan data ke view dari controller.

return view('pages.about’)->withFullname($full);

• Perhatikan huruf besar F (Fullname). Tidak perlu memisahkan fungsidengan variabel. Namun variabel fullname dalam view tetap selaludimulai dengan huruf kecil ($fullname).

Melewatkan Array

• Lewatkan suatu array ke View.

public function getAbout() {

$first = "Alex";

$last = "Doe";

$full = $first . " " . $last;

$email = "[email protected]";

$data = []; // empty array

$data['email'] = $email;

$data['fullname'] = $full;

return view('pages.about')->withData($data);

}

Melewatkan Array

• Sekarang buka resourceviewspagesabout.blade.phpdan masukkan kode berikut.

<div>About: {{ $data[‘fullname’] }} </div>

<p>Email me at: {{ $data[‘email’] }}</p>

4. Laravel: View dan Blade Templating

• View adalah tempat meletakkan HTML (termasuk CSS dan JS) dancontent (isi) untuk ditampilkan kepada pengguna.

• Model digunakan untuk berinteraksi dengan database.

• Controller, berisi banyak pengaturan kerja (logika) aplikasi.

• Route, menyimpan URL dari aplikasi, diarahkan ke controller (atauclosure).

View, Model, Controller dan Route

• View mengandung rancangan (CSS dan JS) dan HTML yang akanditampilkan kepada pengguna.

• Dalam Laravel, semua view disimpan dalam folder views di bawah folder resources.

• Folder tambahan dapat dibuat di dalam folder views untukpengelolaan view yang lebih baik, terutama untuk aplikasi besardan mempunyai banyak level view.

View

• Secara default, Laravel menyediakan file welcome.blade.php

• View ini hanya mengandung HTML (CSS + JavaScript + Bootstrap)sederhana + Blade

• Kita umumnya menuliskan plain HTML di dalam view, tetapi adapilihan untuk menambahkan blade (template khusus Laravel).

View

Catatan

• Kapanpun kita membuat suatu file dalam view, kita selalumemperoleh blade.php di ujungnya.

• Contoh:

welcome.blade.php (welcome adalah nama file sebenarnya)

about.blade.php

Halaman di dalam View

• Kita membuat halaman welcome, about, dan contact di dalam views.

welcome.blade.php,

about.blade.php

contact.blade.php

Layout Laravel dengan Blade

• Blade merupakan templating engine untuk Laravel.

• Memungkinkan developer meletakkan PHP di dalam kode HTML.

• Laravel pada dasarnya menerjemahkannya atau mengkoversikannyake dalam PHP.

Fungsi Blade

• Mengorganisir view menjadi lebih baik. Manfaat yang diperolehdari fungsi-fungsi blade :

• Layout

• Partial

Layout

• Layout adalah rancangan (design) yang dengannya developer dapatmemisahkan bagian berulang dari suatu website.

• Contoh:• Semua halaman pada suatu web site berbagi-pakai navigasi yang sama.

• Layout adalah design untuk mencegah penulisan kode sama di setiaphalaman.

• Design dapat diisi kode yang akan dipakai bersama dan hanya diletakkan di satu tempat (satu file blade).

• Keuntungan: kapanpun dijumpai bug, developer hanya perlumembetulkannya di satu tempat, hanya sekali kerja.

Layout

• Buat suatu file bernama main.blade.php di dalam views.

• Di dalamnya, letakkan semua “elemen berulang” yang digunakan di setiap halaman, hanya ke dalam halaman tunggal ini.

• Di dalam halaman welcome.blade.php:

!Doctype, head, navigation, footer

merupakan bagian yang juga hadir di halaman lain, sehinggabagian-bagian itu diletakkan dalam main.blade.php

Layout

• Blade diawali dengan tanda @. Itu mengisyaratkan Laravel bahwakode yang ditulis adalah blade bukan HTML.

• @yield(‘content’)

• Berguna untuk memanggil suatu layout.

• content merupakan title yang diberikan ke blade ini, ini hanyacontainer yang dibiarkan kosong. Nanti content tersebut akanterisi secara dinamis.

Layout

• Buka main.blade.php, tambahkan kode:

@yield(‘content’)

ini adalah cara memanggil suatu layout.

• Sekarang buka welcome.blade.php dan tambahkan kode blade ini kedalamnya

@extends(‘main’)

@section(‘content’) // Kode HTML untuk mengisi ‘content’

@endsection

Layout

• Mungkin terdapat file css khusus, dan kita tidak ingin memuatnyapada setiap halaman. Hal yang perlu dilakukan adalah membuatsection khusus di dalam welcome.blade.php

@section(‘stylesheets’)

<link rel=“stylesheet”

href=“main.css”

type=“text/css”

/>

@endsecion

Layout

• Kita mungkin perlu menambahkan kode atau file JavaScript

@section(‘scripts’)

<script src=”js/scripts.js”></script> ATAU

<script>window.confirm(‘I loaded up some JS’);

</script>

@endsection

Partial

• Partial dapat menangani content lebih lanjut, dapat digunakanuntuk kode berulang (repetitive code) dan pengelolaannya.

• Melalui partial kita dapat mengekstrak file kode ke dalam filenyasendiri.

• Contoh: Kita dapat mengambil navigasi, mengekstraknya dankemudian jika kita perlu lakukan perubahan terhadap navigasitersebut. Kita membuka navigation’s partial.

Membuat Partial

• Dalam resourcesviews buat suatu foler baru bernama partial.

• Saat membuat partial, biasanya diberikan tanda _(underscore) sebelum nama partial.

• Contoh: _head.blade.php

• Buka main.blade.php, sampai dengan tag body, cut dan paste kedalam _head.blade.php

• dan dalam main.blade.php kita masukkan kode ini

@include(‘_head’)

Sintaks Blade

• Sintaks PHP:

<?php foreach($customers as $customer) ?>

• Sintaks Blade:

@foreach($customers as $customer)

@endforeach

• Sintaks PHP:

<p><?php $customer->cname; ?></p>

• Sintaks Blade:

<p>{{ $customer->cname }}</p>

Sintaks Blade

Sintaks Blade

• Sintaks PHP

• <?php if(true): ?>

<?php echo ‘hello’; ?>

<?php endif; ?>

• Sintaks Blade

@if(true)

{{ ‘hello’ }}

@endif

Anda dapat membaca banyak mengenai sintaks ini di laravel.com

5. Laravel: Model, Migrasi dan Seeding

• Model didasarkan pada item dunia nyata seperti orang, akun bank atau produk.

• Contoh: Jika anda akan membangun suatu blog, model dapatberupa post (postingan) dan comment (komentar).

• Model biasanya permanen dan disimpan di luar aplikasi, seringnya di dalam suatu database.

• Model lebih dari sekedar data; model menjalankan semua business rules yang berlaku terhadap data itu.

• Sebagai contoh, jika suatu diskon tidak akan diberlakukan untukpesanan kurang dari Rp. 100.000, model akan menjalankan batasantersebut.

• Model bertindak sebagai gatekeeper sekaligus data store.

Model

• Dalam Laravel, semua model disimpan di dalam folder app.

• User.php , merupakan model pertama, diberikan secara default oleh Laravel setelah instalasinya berhasil.

• Model ini digunakan untuk menangani otentikasi, login dan logout pengguna.

• Hampir semua aplikasi memerlukan model User.

Model Laravel

• Dalam Laravel, ada konvensi pengaturan nama model.

• Nama model harus menggunaan huruf abjad dengan hurufpertama adalah huruf BESAR.

• Contoh: dalam situs web Blog, kita perlu model yang men-track semua posting. Sehingga model yang dibuat diberi nama Post.php

Catatan

• Dalam arsitektur MVC, model berkaitan erat dengan tabel.

• Model digunakan untuk mendapatkan informasi dan mengelolainformasi di dalam tabel

• Kita biasanya mempunyai model untuk setiap tabel di dalamdatabase. Satu model untuk masing-masing tabel.

• Untuk tabel posts kita punya model bernama Post.

Model

• Migrasi adalah cara di dalam Laravel untuk secara aktual membuattabel database bagi developer.

• Dengan migrasi, kita membuat dan mengupdate tabel-tabeldatabase melalui framework.

• Banyak sekali waktu yang dihemat dan juga sangat berguna untukmemulai sharing kode dengan lainnya.

• Migrasi disimpan di dalam folder databasemigrations

Migrasi

• Untuk membuat suatu model, tuliskan perintah berikut di Terminal:

php artisan make:model Post

• Untuk membuat model sekaligus dengan migrasinya, ketikkanperintah:

php artisan make:model Post --migration

Perintah artisan make:

• Buka file migrasi, misalnya:

2014_10_12_000000_create_user_table.php

di sana ada 2 fungsi: up() dan down().

• up() digunakan untuk membuat (create) tabel database.

• down() akan menghapus (delete/drop) tabel.

Migrasi

• Fungsi default up(), selanjutnya digunakan untuk membuat kolom-kolom dalam tabel (setelah modifikasi).

public function up(){Schema::create('comments', function (Blueprint $table) {

$tableincrements('id');$tabletimestamps();

});}

• Tambahkan kolom-kolom lainnya

• timestamps() membuat dua kolom: created_at dan updated_at

Metode Up()

• Misalya ditambahkan dua kolom (field) bernama title dan body.

$table -> string(‘title’);

$table -> text(‘body’);

• Tambahan nullable() digunakan untuk memungkinkan suatu kolommenerima nilai null.

$table -> string(‘title’) -> nullable()

(berarti title bersifat opsional, tidak error jika field title tidakdiberikan nilai tertentu)

Penambahan Field dalam Tabel

string dan text adalah tipedata dari kolom yang dibuat

Menambahkan Field ke dalam Tabel

$table -> string(‘title’) -> default(‘No Title Given’)

• Itu berarti jika field title tidak diberikan nilai tertentu maka nilaidefaultnya adalah ‘No Title Given’

• Unsigned() , menunjukkan bahwa nilai negatif tidak dibolehkan, haruspositif.

• Apa saja tipe data yang tersedia? Akses laravel.com, klikdocumentation dan kemudian klik migration.

Tipe Data Field

Tipe Data Field (Kolom)

$table->bigInteger('votes'); BIGINT equivalent for the database.

$table->binary('data'); BLOB equivalent for the database.

$table->boolean('confirmed'); BOOLEAN equivalent for the database.

$table->char('name', 4); CHAR equivalent with a length.

$table->date('created_at'); DATE equivalent for the database.

$table->dateTime('created_at'); DATETIME equivalent for the database.

$table->decimal('amount', 5, 2); DECIMAL equivalent with a precision and scale.

$table->double('column', 15, 8);DOUBLE equivalent with precision, 15 digits in total and 8 after the decimal point.

$table->enum('choices', ['foo', 'bar']); ENUM equivalent for the database.

$table->float('amount', 8, 2);FLOAT equivalent for the database, 8 digits in total and 2 after the decimal point.

$table->increments('id'); Incrementing ID (primary key) using a "UNSIGNED INTEGER" equivalent.

$table->integer('votes'); INTEGER equivalent for the database.

• Down() adalah fungsi dalam migrasi untuk menghapus (delete/drop) suatu tabel

Metode down()

• Buka file .env dalam direktori root. Ubah:

• Nama DB_DATABASE sama dengan laravel_db

• DB_USERNAME bernilai root

• DB_PASSWORD bernilai blank

Koneksi ke Database

• Buka file .env dalam direktori root, berikan nama database, username dan password MySQL di dalamnya.

• Untuk membuat tabel, jalankan perintah migrasi berikut:

php artisan migrate

Koneksi ke Database

• Untuk mengganti-nama kolom, kita dapat menggunakan metoderenameColumn pada Schema builder. Sebelum mengganti namakolom, pastikan kita sudah menambahkan

doctrine/ dbal dependency

ke dalam file composer.json:

Schema::table('users', function ($table) {

$tablerenameColumn('from', 'to');

});

Mengganti Nama Field

• Untuk menghapus suatu kolom, gunakan metode dropColumn padaSchema builder.

Schema::table('users', function ($table) {

$tabledropColumn(‘votes’);

});

Menghapus Field

• Menggunakan metode dropColumn tetapi banyak nama kolom yang dijadikan parameternya:

Schema::table('users', function ($table) {

$tabledropColumn(‘votes’,’avatar’,’location’);

});

Menghapus Banyak Field

• Sebelum menghapus kolom dari suatu database, kita perlumenambahkan

doctrine/dbal dependency

ke dalam file composer.json

• Jalankan perintah

composer update

di Command line atau Terminal untuk menginstall library.

Catatan

Jenis Indeks yang Tersedia

Command Description

$table->primary('id'); Add a primary key.

$table->primary(['first', 'last']); Add composite keys.

$table->unique('email'); Add a unique index.

$table->unique('state', 'my_index_name'); Add a custom index name.

$table->unique(['first', 'last']); Add a composite unique index.

$table->index('state'); Add a basic index.

• Untuk menghapus suatu index, kita harus menentukan nama index. Secaradefault, Laravel secara otomatis memberikan nama yang reasonable untukindexes. Simpelnya, gabungkan nama tabel, nama kolom yang diindeks dantipe indeksnya. Ini adalah beberapa contoh:

Menghapus Indeks

Command Description

$table->dropPrimary('users_id_primary'); Drop a primary key from the "users" table.

$table->dropUnique('users_email_unique'); Drop a unique index from the "users" table.

$table->dropIndex('geo_state_index'); Drop a basic index from the "geo" table.

Schema::table('geo', function (Blueprint $table) { $table->dropIndex(['state']); // Drops index 'geo_state_index’

});

• Laravel juga menyediakan dukungan untuk pembuatan foreign key constraints, yang digunakan untuk memaksakan referential integrity pada tingkatan database. Sebagai contoh, kita dapat mendefinisikankolom user_id pada tabel posts yang merujuk kolom id padatabel users:

Membuat Foreign Key

Schema::table('posts', function (Blueprint $table) {$table->integer('user_id')->unsigned();$table->foreign('user_id')->references('id')->on('users’);

});

Menghapus Foreign Key

• Kita dapat menentukan tindakan untuk properti "on delete" dan "on update" dari constraint:

$table->foreign('user_id’)->references('id')->on('users’)->onDelete('cascade');

Untuk menghapus foreign key, gunakan metode dropForeign. Foreign key constraints menggunakan konvensi nama seperti indeks: gabungan nama tabeldan kolom, kemudian akhiri dengan _foreign:

$table->dropForeign('posts_user_id_foreign');

Atau dengan perintah: $table->dropForeign(['user_id']);

• Dengan database seeding kita dapat mengisi database dengan data dummy dengan perintah sederhana.

• Tabel posts terdiri dari 3 kolom (title, body, created).

• Semua kelas seed disimpan di dalam databaseseeds.

• Secara default kelas DatabaseSeeder sudah tersedia (terdefinisi).

• Dari kelas ini, kita dapat menggunakan metode call() untukmenjalankan kelas-kelas see lainnya.

Seeding

• Untuk membangkitkan seeder, kita gunakan perintah Artisan. Semua seeders yang dibangkitkan oleh framework akanditempatkan di dalam direktori database/seeders

php artisan make:seeder UserTableSeeder

• Kelas seeder hanya mengandung satu metode default: run. Metodeini dipanggil ketika perintah db:seed dieksekusi.

Seeding

Seeding

Seeding

• Buka databaseseedsDatabaseSeeder.php, dan ubah namakelas, tuliskan nama seed yang telah anda buat.

Mengubah Kelas DatabaseSeeder

• Silakan pindah ke root directory dari Laravel (di Terminal) danjalankan perintah berikut:

php artisan db:seed

Perintah Artisan

6. Laravel: Operasi CRUD

Create/Insert Data dalam Laravel

• Untuk membuat model dan migrasi Post, ketikkan perintah ini di Terminal setelah berpindah ke root directory dari proyek Laravel:

php artisan make:model Post --migration

• Buka migrasi posts, dan tambahkan dua kolom ini:

$table string('title');

$table text('body');

1. Membuat Model Post

Fungsi up() Migrasi create_posts_table

• Buat database bernama blog dalamMySql.

• Buka file .env dalam direktori root. Ubah baris berikut sesuaikonfigurasi database anda, misal:

• Nama DB_DATABASE menjadi blog

• DB_USERNAME menjadi root

• DB_PASSWORD menjadi blank

2. Membuat Database

• Eksekusi perintah berikut di Terminal

php artisan migrate

• Setelah menjalankan perintah ini, Laravel akan membuatkan tabel posts di dalam database.

• Buka file appserviceprovider.php, di dalam metode boot(), tambahkan:

Schema::defaultStringLength(191);

• Pastikan ada baris untuk penggunan Illuminate\Support\Facades \Schema di atas nama kelas service provider ini.

3. Jalankan Migrasi (Migration)

• Langkah berikutnya adalah membuat suatu Controller CRUD.

• Pada console (Terminal), pindahlah ke direktori root dan ketikperintah berikut:

php artisan make:controller PostController --resource

4. Membuat Controller CRUD

• Buka file routesweb.php, dan tuliskan

Route::resource(‘posts’, ‘PostController’)

• Untuk menampilkan semua route yang dimiliki oleh aplikasi, padaTerminal ketikkan perintah:

php artisan route:list

5. Membuat Rute

• Untuk menyisipkan atau menambahkan data, kita membuat form.

• Buat folder post di dalam views dan kemudian buat file barubernama create.blade.php

• Akan digunakan kelas Html, Form helper untuk membangun form ini

6. Membuat Form

create.blade.php@extends('main')@section('content')<div class="row">

<div class="col-md-6 col-md-offset-3">@if(Session::has('success'))

<div class="alert alert-success" role="alert"><strong>Success:</strong> {{ Session::get('success') }}

</div> @endif<form method="post" {{ action(‘PostController@store') }}>

<input type="hidden" name="_token" value="{{ csrf_token() }}"><table class="table">

<caption class="text-center"><b>Student Registration Form</b></caption><tr><td>Post Title:</td><td><input type="text" name=“title" class="form-control"></td></tr><tr><td>Post Message:</td><td><textarea name=“body” class=“form-control”></textarea></td></tr><tr><td></td><td><input type="submit" name="submit" value="Add Student"

class="btn btn-primary"></td></tr></table>

</form></div>

</div>@endsection

• Buka file PostController.php dan update fungsi create denganmenambahkan kode berikut:

public function create(){

return view(‘posts.create’);

}

• Untuk mengakses form ini, gunakan URL:

localhost:8000/posts/create

7. Mengupdate Controller

Akan memanggil view bernamacreate yang berada dalam folder

posts (dalam folder views)

• Untuk mengakses form ketik URL:

localhost:8000/posts/create

8. Mengakses Form

• Metode create dalam PostController digunakan untuk menampilkanview create, untuk menerima input dari pengguna.

• Metode store() bertugas untuk menyimpan data yang diinputkan di form create ke dalam database.

• Ada dua aksi yang dikerjakan di dalam metode store():• Menyimpan (store) data ke dalam database

• Mengarahkan (redirect) ke halaman lain (biasanya halaman index)

9. Metode store()

public function store(Request $request){

$post = new Post;

$post->title = $request->input(‘title’);

$post->body = $request->input(‘body’);

$post->save();

session::flash('success', 'The post was successfully save!');

return redirect()->route('posts.show',$post->id);

}

Metode store()Ini adalah model yang bekerja

dengan tabel posts. Jadi inimembuat instance dari model.

Kita membuat obyek dari kelasPost (model), kita perlu

memberitahukan Controller tentang ini.

• Flash Session adalah suatu session, hanya ada untuk request aktif(current request).

• Jika data berhasil disimpan ke dalam database, tampilkan pesansukses kepada pengguna. Dapat digunakan metode flash().

• Metode flash() perlu dua parameter. Pertama adalah key dan keduaadalah value (nilainya). Di bawah ini key diberi nama success danvaluenya adalah pesan yang akan ditampilkan.

session::flash(‘success’, ‘The post was successfully save!’)

Pesan Sukses

Kita menggunakan metodeflash dari kelas Session untukmenampilkan pesan sukses

kepada pengguna

Kira menggunakan kelasSession sehingga perlu

memberitahukan Controller tentang itu

• Update PostController.php

public function show($id) {

return view('post.show');

}

Update PostController.php

• Setup suatu halaman untuk pesan (message).

• Buat file baru bernama _messages.blade.php di dalam folder resourcesviewspartial.

• Untuk menampilkan pesan alert di bagian atas halaman, tambahkankode ini

@include(‘partial._messages’)

pada main.blade.php , sebelum @yield(‘content’)

_messages.blade.php

@if(Session::has('success'))<div class="alert alert-success" role="alert">

<strong>Success:</strong> {{ Session::get('success') }}</div>

@endif

@if(count($errors) > 0)<div class="alert alert-danger" role="alert"><strong>Errors:</strong><ul>@foreach( $errors->all() as $error )

<li>{{ $error }}</li>@endforeach

</ul></div>

@endif

_messages.blade.php

_messages.blade.php

• Masukkan URL localhost:8000/posts/create, request menuju metodecreate() pada PostController, dan kemudian metode create() me-redirect ke create.blade.php dalam view.

• Create.blade.php adalah halaman berisi form, pengguna akan mengisiform dan klik pada tombol create post.

• Pada create.blade.php, ketika pengguna klik pada tombol, setelahmengisi form, request menuju metode store() dari PostController. Dalammetode store() data disimpan ke dalam database dan pesan suksesdibangkitkan dan kemudian me-redirect ke metode show() dariPostController.

• Pada metode show() akan me-redirect ke halaman view show.blade.php.

Bagaimana Kerjanya?

Membaca Data dari dalamLaravel

• Kita telah membuat resource controller, menghasilkan banyak rute. posts.index adalah salah satunya. Kita akan menanganinya.

Membaca (Read) Data

• Buka file PostController.php, kita akan kerjakan dua tugas di dalammetode index().

• Membuat suatu variabel dan meletakkan semua blog post kedalamnya dari database.

• Mengembalikan suatu view dan mengirimkan variabel di atas keview tersebut.

Update PostController

public function index() {

// ambil semua data dari database

$posts = Post::all();

return view('post.index')->withPosts($posts);

}

Fungsi Index()

• Buatlah file baru index.blade.php dan letakkan di dalam folder post di dalam folder views.

• Ini adalah file dimana kita akan menampilkan semua blog post yang sudah ada di dalam database.

Index.blade.php

@extends('main')@section('title', '| All Posts')@section('content')<div class="row"><div class="col-md-10">

<h1>All Posts</h1></div><div class="col-md-2"><a href="{{ route('posts.create') }}" class="btn btn-lg btn-block btn-primary btn-h1-spacing">

Create New Post</a></div><hr/>

<div class="col-md-12"><hr/></div></div><div class="row"><div class="col-md-12"><table class="table"><thead>

<th>#</th><th>Title</th><th>Body</th><th>Created At</th><th></th></thead><tbody>@foreach($posts as $post)<tr><th>{{ $post->id }}</th><td>{{ $post->title }}</td><td>{{ $post->body }}</td><td>{{ $post->created_at }}</td><td><a href="#" class="btn btn-default">View</a><a href="#" class="btn btn-default">Edit</a></td></tr>@endforeach</tbody></table></div></div>@endsection

Potongan Kode index.blade.php

• Untuk mengakses halaman index, masukkan URL: localhost:8000/posts

Output

Update Data dalam Laravel

• Klik tombol Edit, requestnya menuju metode edit() padaPostController, dan kemudian metode edit() me-redirect keedit.blade.php dalam view.

• edit.blade.php adalah file dimana kita meletakkan kode program untuk menampilkan form update data.

• Pada edit.blade.php, saat pengguna klik pada tombol Update, setelah mengedit datanya, request menuju metode update() dariPostController.

• Pada metode update() kita meminta kode untuk menyimpan data perubahan (terupdate) ke dalam database.

Bagaimana Kerjanya?

• Untuk mengupdate data, kita perlu membuat file baru.

• Buatlah file bernama edit.blade.php dan simpan di dalamresourceviewspost

Edit.blade.php

@extends('main')@section('title', '| Edit Blog Post')@section('content')

<div class="row">{!! Form::model($post, ['route' => ['posts.update', $post->id], 'method' => 'PUT']) !!}<div class="col-md-8">

{{ Form::label('title', 'Title:') }}{{ Form::text('title', null, ["class" => 'form-control input-lg']) }}{{ Form::label('body', 'Body:', ['class' => "form-spacing-top"])}}{{ Form::textarea('body', null, ["class" => 'form-control']) }}

</div>

<div class="col-md-4"><div class="well"><dl class="dl-horizontal">

<dt>Create At: </dt><dd>{{ date('M j, Y h:ia', strtotime($post->created_at)) }}</dd>

</dl><dl class="dl-horizontal">

<dt>Last Updated: </dt><dd>{{ date('M j, Y h:ia', strtotime($post->updated_at)) }}</dd>

</dl><hr/><div class="row"><div class="col-sm-6">{!! Html::linkRoute('posts.show', 'Cancel', array($post->id), array('class' => 'btn btn-danger btn-block')) !!}</div><div class="col-sm-6">

{{ Form::submit('Save Changes', ['class' => 'btn btn-success btn-block']) }}</div></div></div></div>{!! Form::close() !!}

</div>

@stop

Untuk update data, hanyadapat menggunakan metode

PUT atau PATCH

• Buka PostController.php, untuk update kita akan bekerja padametode update(). Ada empat tugas di dalam metode ini:

• Validasi terhadap data

• Menyimpan data ke dalam database

• Menampilkan pesan sukses

• Me-redirect ke view posts.show

Update PostController

Argumen $id adalah record yang akan diupdate.

Menghapus Data dalam Laravel

• Delete tidak perlu halaman khusus (beda dengan create dan edit), cukup metode di dalam controller saja.

• Buka show.blade.php , ubah file tersebut. Ganti tombol delete dengantombol submit dari kelas Form.

{!! Form::open(['route' => ['posts.destroy’, $post->id], 'method' => 'DELETE']) !!}

{!! Form::submit('Delete’, ['class' => 'btn btn-danger btn-block']) !!}

{!! Form::close() !!}

Menghapus Data (Delete)

• Buka PostController.php. Penghapusan data ditangani dalam metodedestroy().

public function destroy($id) {//ambil post sesuai $id$post = Post::find($id);$post->delete(); Session::flash('success’,

'The post was successfully deleted.');

return redirect()->route('posts.index');}

Metode destroy()

Argumen $id adalah record yang akan dihapus.