1 of 157

Laravel

Blade Template

Eko Kurniawan Khannedy

2 of 157

Eko Kurniawan Khannedy

  • Technical architect at one of the biggest ecommerce company in Indonesia
  • 11+ years experiences
  • www.programmerzamannow.com
  • youtube.com/c/ProgrammerZamanNow

3 of 157

Eko Kurniawan Khannedy

4 of 157

Sebelum Belajar

  • Laravel Dasar

5 of 157

Agenda

  • Pengenalan Blade Template
  • Menampilkan View
  • If Statement
  • For Loop
  • While Loop
  • Include
  • Template Inheritance
  • Dan lain-lain

6 of 157

Pengenalan Blade Template

7 of 157

Blade Template

  • Blade adalah library yang terdapat di Laravel sebagai templating engine
  • Tidak seperti template engine lainnya, Blade tidak melarang kita untuk menggunakan kode PHP di file template, walaupun ini sebenarnya tidak disarankan
  • Semua file template di Blade sebenarnya akan di compile menjadi kode PHP
  • Blade menggunakan file .blade.php sebagai nama file template nya
  • Dan biasanya disimpan di folder resources/views

8 of 157

Membuat Project

9 of 157

Membuat Project

  • composer create-project laravel/laravel=version belajar-laravel-blade-template
  • https://packagist.org/packages/laravel/laravel

10 of 157

Menampilkan View

11 of 157

Blade

  • Membuat response dari Route itu sangat mudah, tapi jika misal kita ingin membuat response yang kompleks seperti HTML, maka akan sulit jika kita lakukan di Route
  • Blade adalah fitur di Laravel yang digunakan untuk mempermudah dalam pembuatan tampilan halaman web HTML
  • Dengan Blade template, kita bisa membedakan lokasi logic aplikasi, dengan kode tampilan
  • Semua template disimpan di folder resources/views

12 of 157

Blade Variable

  • Salah satu keuntungan menggunakan template dibanding kode PHP langsung adalah, kita bisa memaksa programmer untuk memisahkan logic kode program dengan tampilan (di template)
  • Di Blade, walaupun kita bisa membuat kode PHP, tapi tidak disarankan menggunakan itu
  • Cara yang direkomendasikan adalah, kita hanya membuat variable di template blade, lalu mengirim variable tersebut dari luar ketika akan menampilkan template nya
  • Untuk membuat menampilkan variable di blade template, kita bisa gunakan {{ $nama }}, dinama nanti variable $nama bisa diambil secara otomatis dari data yang kita kirim ketika menampilkan view blade nya

13 of 157

Kode : Hello View

14 of 157

Rendering View

  • Setelah kita membuat View, selanjutnya untuk me-render (menampilkan) View tersebut di dalam Router, kita bisa menggunakan function Route::view(uri, template, array) atau menggunakan view(template, array) di dalam closure function Route / Controller
  • Dimana template adalah nama template, tanpa menggunakan blade.php, dan array berisikan data variable yang ingin kita gunakan

15 of 157

Kode : Rendering View

16 of 157

Test Rendering View

17 of 157

Nested View Directory

  • View juga bisa disimpan di dalam directory lagi di dalam directory views
  • Hal ini baik ketika kita sudah banyak membuat views, dan ingin melakukan management file views
  • Namun ketika kita ingin mengambil views nya, kita perlu ganti menjadi titik, tidak menggunakan / (slash)
  • Misal jika kita buat views di folder admin/profile.blade.php, maka untuk mengaksesnya kita gunakan admin.profile

18 of 157

Kode : View

19 of 157

Kode : Route View

20 of 157

Test View Tanpa Routing

  • Kadang kita juga ingin membuat View tanpa routing, misal untuk mengirim email misalnya
  • Pada kasus ini, kita bisa melakukan test view secara langsung, tanpa harus membuat Route terlebih dahulu

21 of 157

Kode : Test View Tanpa Route

22 of 157

Comment

23 of 157

Comment

  • Blade Template juga mendukung komentar, dengan menggunakan {{-- isi komentar --}}
  • Isi komentar secara otomatis tidak akan dieksekusi, dan tidak akan ditampilkan juga di hasil HTML nya

24 of 157

Kode : Comment

25 of 157

Kode : Unit Test Comment

26 of 157

HTML Encoding

27 of 157

HTML Encoding

  • Secara default, saat kita menampilkan data di Blade Template menggunakan {{}}, secara otomatis Blade akan memanggil function htmlspecialchars(data) untuk memastikan data aman dari tag HTML yang bisa menyebabkan XSS Attack (Cross Site Scripting)
  • Namun jika kita ingin menampilkan tanpa di escape, maka kita bisa menggunakan {!! $variable !!}
  • Namun harap hati-hati, karena jika tidak hati-hati, kita bisa terkena serangan XSS

28 of 157

Kode : HTML Encoding

29 of 157

Kode : Routing

30 of 157

Hasil HTML Encoding

31 of 157

Disabled Blade

32 of 157

Disabled Blade

  • Blade menggunakan tanda kurung kurawal untuk menampilkan variable
  • Saat kita membuat web, kadang kita ingin menampilkan tulisan seperti perintah-perintah yang ada di Blade
  • Hal ini akan menimbulkan perintah-perintah tersebut akan dieksekusi oleh Blade

33 of 157

Tanda @

  • Pada bagian yang kita ingin Blade Template tidak dieksekusi, kita bisa menambahkan @ diawal perintah Blade Template nya
  • Misalnya @{{ $eko }}, maka akan ditampilkan apa adanya tanpa @
  • Misalnya @@if, maka hasilnya akan ditampilkan apa adanya tanpa @ pertama
  • Namun jika misal terdapat banyak baris yang kita harapkan tidak menggunakan Blade Template, kita bisa menggunakan perintah @verbatim dan diakhiri dengan @endverbatim

34 of 157

Kode : Disabled Blade

35 of 157

Kode : Test Disabled Blade

36 of 157

If Statement

37 of 157

If Statement

  • Blade Template mendukung percabangan if menggunakan perintah/directive @if, @elseif, @else dan @endif
  • Perintah ini hampir mirip dengan kode PHP

38 of 157

Kode : If Statement

39 of 157

Kode : Test If Statement

40 of 157

Unless Statement

41 of 157

Unless Statement

  • Blade Template mendukung directive @unless dan @endunless
  • Directive ini digunakan kebalikan dari if statement, dimana jika nilainya false, maka isi body akan eksekusi

42 of 157

Kode : Unless

43 of 157

Kode : Test Unless

44 of 157

Isset dan Empty

45 of 157

Isset dan Empty

  • Blade template juga memiliki directive @isset dan @empty
  • @isset digunakan untuk mengecek apakah sebuah variable ada dan tidak bernilai null
  • @empty digunakan untuk mengecek apakah sebuah variable merupakan array kosong

46 of 157

Kode : Isset dan Empty

47 of 157

Kode : Test Isset dan Empty

48 of 157

Env

49 of 157

Env

  • Laravel mendukung multi environment, kita bisa menggunakan Facade Env untuk mendapatkan environment yang digunakan saat ini
  • Dalam Blade Template, kita bisa menggunakan directive @env(name) atau @env([name1, name2]) untuk mengecek apakah sedang menggunakan environment tersebut atau tidak

50 of 157

Kode : Env

51 of 157

Kode : Unit Test Env

52 of 157

Switch Statement

53 of 157

Switch Statement

  • Selain menggunakan @if, percabangan di Blade Template juga bisa menggunakan directive @switch
  • Seperti di kode PHP, dalam Blade Template, kita perlu kombinasikan dengan @case dan juga @break dan @default

54 of 157

Kode : Switch

55 of 157

Kode : Test Switch

56 of 157

For Loop

57 of 157

For Loop

  • Blade juga mendukung perintah untuk melakukan perulangan for
  • For loop mirip seperti di PHP, kita bisa menggunakan increment

58 of 157

Kode : For Loop

59 of 157

Kode : Test For Loop

60 of 157

Foreach Loop

  • Kadang ada kalanya kita ingin melakukan iterasi terhadap semua data yang terdapat di array
  • Di Blade Template, kita bisa lebih mudah menggunakan directive @foreach dibandingkan menggunakan @for

61 of 157

Kode : Foreach Loop

62 of 157

Kode : Test Foreach Loop

63 of 157

Forelse Loop

  • Apa yang terjadi ketika misal kita melakukan iterasi menggunakan @foreach, namun ternyata datanya tidak ada?
  • Secara otomatis tidak akan menampilkan data apapun
  • Kadang kita ingin menampilkan sesuatu ketika tidak ada datanya
  • Pada kasus ini, kita bisa menggunakan @forelse, dimana kita bisa menambahkan directive @empty ketika data array tidak ada isinya

64 of 157

Kode : Forelse Loop

65 of 157

Kode : Test Forelse Loop

66 of 157

Raw PHP

67 of 157

Raw PHP

  • Kadang ada kasus kita ingin menggunakan kode PHP langsung di Blade Template
  • Walaupun ini tidak direkomendasikan, tapi bisa kita lakukan
  • Kita bisa gunakan directive @php untuk memasukkan kode php

68 of 157

Kode : Raw PHP

69 of 157

Kode : Tes Raw PHP

70 of 157

While Loop

71 of 157

While Loop

  • Selain perulangan for, di Blade Template juga mendukung perulangan @while
  • Dengan perulangan @while, kita bisa melakukan perulangan selama kondisi @while bernilai true

72 of 157

Kode : While Loop

73 of 157

Kode : Test While Loop

74 of 157

Loop Variable

75 of 157

Loop Variable

  • Saat kita menggunakan perulangan @foreach, terdapat variable $loop yang tersedia di dalam perulangannya
  • Variable $loop berisikan informasi yang bermanfaat seperti index iterasi, apakah ini iterasi pertama atau terakhir, dan lain-lain

76 of 157

Loop Property

77 of 157

Kode : Loop Variable

78 of 157

Kode : Test Loop Variable

79 of 157

CSS Class

80 of 157

CSS Class

  • Saat membuat web, kadang kita ingin mengubah-ubah CSS class berdasarkan response backend
  • Blade Template menyediakan @class directive untuk mempermudah kita melakukannya

81 of 157

Kode : CSS Class

82 of 157

Kode : Test CSS Class

83 of 157

Include

84 of 157

Include

  • Saat kita membuat halaman web, kadang ada beberapa bagian yang sama di beberapa halaman web
  • Pada kasus ini, ada baiknya kita membuat kode web tersebut di file template yang berbeda
  • Selanjutnya kita bisa menggunakan directive @include untuk mengambil file template tersebut

85 of 157

Kode : Header Template

86 of 157

Kode : Include

87 of 157

Kode : Test Include

88 of 157

Include Parameter

  • Secara default, semua data yang dikirim ke template utama akan dikirim ke template yang kita @include
  • Namun, jika kita ingin menambah parameter tambahan, kita juga bisa menambahnya ketika menggunakan directive @include(template, data)

89 of 157

Kode : Header Template

90 of 157

Kode : Include

91 of 157

Kode : Test Include

92 of 157

Include Condition

93 of 157

Include Condition

  • Kadang terdapat kondisi kita ingin melakukan @include pada kondisi tertentu
  • Maka biasanya kita akan menggunakan directive @if untuk melakukan pengecekan kondisi tersebut
  • Blade Template memiliki directive lain untuk mempermudah kita ketika membutuhkan kondisi tertentu untuk melakukan @include

94 of 157

Include Condition Directive

Directive

Keterangan

@includeWhen(kondisi, template, data)

Include dilakukan ketika kondisi true

@includeUnless(kondisi, template, data)

Include dilakukan ketika kondisi false

95 of 157

Kode : Layout

96 of 157

Kode : Include Condition

97 of 157

Kode : Test Include Condition

98 of 157

Each dan Once

99 of 157

Each dan Once

  • Pada kasus tertentu, kadang kita ingin menampilkan layout sesuai dengan jumlah data
  • Lalu misal kita perlu menambahkan sebuah kode yang cukup sekali saja ditampilkan, walaupun layout ditampilkan lebih dari sekali, misal kode CSS atau JavaScript
  • Kita bisa menggunakan directive @each dan @once

100 of 157

Each dan Once Directive

Directive

Keterangan

@each(template, array, variable)

Include template berkali-kali sesuai iterasi jumlah array, dimana data tiap array bisa diakses dengan variable di template nya

@once

Disimpan di layout, secara otomatis jika layout tersebut ditampilkan berkali-kali, bagian @once hanya ditampilkan sekali saja

101 of 157

Kode : Layout

102 of 157

Kode : Each

103 of 157

Kode : Test Each

104 of 157

Form

105 of 157

Form Directive

  • Blade Template memiliki beberapa directive untuk membantu kita mempermudah ketika kita membuat form
  • Ada @checked(kondisi) @selected(kondisi) @disabled(kondisi) @readonly(kondisi) dan @required(kondisi)
  • Kondisi pada form directive merupakan boolean, jika true, maka secara otomatis directive tersebut akan dijalankan
  • Penggunaan form directive ini lebih mudah dibanding kita menggunakan directive @if secara manual

106 of 157

Detail Form Directive

Directive

Jika kondisi true

@checked

Maka input checkbox akan memiliki attribute checked

@selected

Maka input option akan memiliki attribute selected

@disabled

Maka input akan memiliki attribute disabled

@readonly

Maka input akan memiliki attribute readonly

@required

Maka input akan memiliki attributed required

107 of 157

Kode : Form Directive

108 of 157

Kode : Test Form Directive

109 of 157

CSRF

110 of 157

CSRF

  • Materi CSRF (Cross Site Request Forgery) sudah kita bahas di kelas Laravel Dasar
  • Secara default, saat kita mengirim HTTP Post ke aplikasi Laravel kita, Laravel akan mengecek token CSRF, untuk memastikan bahwa request tersebut benar berasal dari web kita
  • Pengecekan ini dilakukan oleh VerifyCsrfToken Middleware
  • Blade Template memiliki directive @csrf yang bisa digunakan untuk mempermudah kita ketika ingin menambahkan token CSRF di form kita

111 of 157

Kode : CSRF

112 of 157

Kode : Test CSRF

113 of 157

Error

114 of 157

Error

  • Laravel memiliki fitur yang bernama Validation, dimana kita bisa dengan mudah melakukan validasi
  • Laravel Validation akan dibahas di materi tersendiri
  • Ketika terjadi validation error, kita bisa menangkap error dengan directive @error(field) dan menangkap message nya dengan variable $message di dalam directive @error nya

115 of 157

Kode : Error

116 of 157

Kode : Test Error

117 of 157

Stack

118 of 157

Stack

  • Blade memiliki kemampuan mirip struktur data Stack / Tumpukan
  • Dimana kita bisa mengirim data ke stack tersebut menggunakan directive @push(nama) atau @pushIf(kondisi, nama)
  • Ketika kita ingin menampilkan semua data yang terdapat di Stack, kita bisa gunakan directive @stack(nama)
  • Secara default @push() akan mengirim data ke posisi paling belakang, jika kita ingin mengirim data ke urutan paling awal, kita bisa gunakan directive @prepend(name)

119 of 157

Kode : Stack

120 of 157

Kode : Test Stack

121 of 157

Template Inheritance

122 of 157

Template Inheritance

  • Sebelumnya, kita menggunakan @include untuk menggunakan template lain
  • Blade mendukung Template Inheritance, caranya terbalik dengan @include
  • Dalam @include, parent akan melakukan include ke template child nya
  • Dalam Template Inheritance, child yang akan melakukan extends ke parent template, dan child yang akan menentukan isi dari parent nya

123 of 157

Parent Layout

  • Di parent layout, kita bisa menggunakan @yield(name, default) untuk lokasi template yang harus dibuat nanti di child layout

124 of 157

Kode : Parent Layout

125 of 157

Child Layout

  • Untuk membuat child layout, kita bisa menggunakan directive @extends(parentlayout)
  • Di dalam child layout, kita bisa membuat @section(name) yang nanti akan dieksekusi di posisi @yield(name) di parent nya

126 of 157

Kode : Child Layout

127 of 157

Kode : Test Template Inheritance

128 of 157

Show Directive

  • Pada beberapa kasus, kadang kita ingin membuat default @section(name) di parent layout, namun tetap bisa di override di child layout
  • Kita bisa menggunakan @section(name) di parent layout, namun ditutup dengan @show, bukan @endsection
  • Jika di child layout kita membuat @section(name), secara otomatis @section(name) di parent akan di override, namun jika kita tetap ingin memanggil @section(name) di parent, kita bisa gunakan directive @parent di child layout nya

129 of 157

Kode : Parent Layout

130 of 157

Kode : Child Layout

131 of 157

Kode : Test Template Inheritance

132 of 157

Service Injection

133 of 157

Service Injection

  • Blade Template juga mendukung directive @inject(variable, service) untuk mengambil object dari Service Container
  • Secara otomatis data object akan di inject ke variable yang disebutkan di directive @inject

134 of 157

Kode : Membuat Service

135 of 157

Kode : Registrasi ke AppServiceProvider

136 of 157

Kode : Service Injection

137 of 157

Kode : Test Service Injection

138 of 157

Inline Blade Template

139 of 157

Blade Facade

  • Blade juga memiliki Facade yang bisa kita gunakan untuk menggunakan Blade Template
  • Ini akan mempermudah kita ketika kita ingin mengakses Blade Template dari Class seperti contohnya dari Controller
  • Ada banyak sekali fitur yang terdapat di Blade Facade yang bisa kita gunakan
  • https://laravel.com/api/9.x/Illuminate/Support/Facades/Blade.html

140 of 157

Inline Blade Template

  • Salah satu fitur yang bisa kita gunakan dengan Blade Facade adalah, Inline Template
  • Inline Template adalah kemampuan dimana kita bisa me-render template tanpa harus membuat file template, cukup menggunakan string saja
  • Kita bisa menggunakan method Blade::render(template, data)

141 of 157

Kode : Test Inline Blade Template

142 of 157

Extending Blade

143 of 157

Extending Blade

  • Blade Facade juga bisa kita gunakan untuk menambahkan custom directive
  • Sehingga kita bisa membuat directive sendiri, dan bisa digunakan di Blade Template menggunakan method Blade::directive(nama, function)
  • Agar aman, kita perlu meregistrasi directive di Service Provider

144 of 157

Kode : Extending Blade

145 of 157

Kode : Layout Extending Blade

146 of 157

Kode : Test Extending Blade

147 of 157

Custom Echo Handler

148 of 157

Custom Echo Handler

  • Saat kita menggunakan {{ $variable }}, secara otomatis Blade Template akan mengkonversi menjadi echo ($variable)-->__toString()
  • Pada kasus tertentu, mungkin kita ingin mengubah nya, misal ketika datanya berubah class tertentu, kita ingin mengubah hasil String nya
  • Kita bisa menggunakan Facade Blade untuk mengubahnya, dengan cara menggunakan method Blade::stringable(class, function)

149 of 157

Kode : Class Model

150 of 157

Kode : Custom Echo Handler

151 of 157

Kode : Layout

152 of 157

Kode : Test Custom Echo Handler

153 of 157

Optimize Template

154 of 157

Optimizing Template

  • Secara default, Blade Template di compile menjadi kode PHP ketika ketika ada request, Laravel akan mengecek apakah hasil compile Blade Template ada atau tidak, jika ada maka akan menggunakannya, jika tidak ada maka akan coba melakukan compile.
  • Termasuk Laravel juga akan mendeteksi ketika ada perubahan Blade Template.
  • Kompilasi ketika request masuk akan ada efek buruknya, yaitu performanya jadi lambat karena harus melakukan kompilasi. Oleh karena itu ketika nanti menjalankan aplikasi Laravel di production, ada baiknya melakukan proses kompilasi seluruh blade template terlebih dahulu, agar tidak perlu melakukan kompilasi lagi ketika request masuk

155 of 157

Compiling Template

  • Untuk melakukan compile view atau blade template, kita bisa gunakan perintah :�php artisan view:cache
  • Semua hasil compile view akan disimpan di folder storage/framework/views
  • Jika kita ingin menghapus seluruh hasil compile, kita bisa gunakan perintah �php artisan view:clear

156 of 157

Materi Selanjutnya

157 of 157

Materi Selanjutnya

  • Laravel Component
  • Laravel Database / Eloquent
  • Laravel Validation
  • Laravel Command
  • Laravel HTTP Client
  • Dan lain-lain