Bu yazımızda laravelin template yapısı olan blade template yapısından ve nasıl kullanılacağından bahsedeceğiz.

Blade, Laravel'e dahil olan basit ama güçlü bir template oluşturma motorudur. Aslında tüm blade şablonları düz php kodu ile derlenir ve değiştirilene kadar önbelleğe alınır.
Yani projenin performansına olumsuz yönde etki etmez.
Blade template yapısını resources/views klasöründe .blade.php uzantlı dosyalarımızda kullanırız.
Blade yapısını rotalardan yinlendirdiğimiz view dosyalarında kullanabiliriz.
Route::get('/', function () {
return view('test', ['isim' => 'Zafer']);
});
View dosyasına gönderdiğimiz verileri süslü parantez içerisine alarak view dosyasında gösterebiliriz. Örnek olarak aşağıdaki route dosyasını tanımladığımızda;
Route::get('/', function () {
return view('index', ['isim' => 'Zafer']);
});
View dosyamızda isim değişkenini şu şekilde gösterebiliriz:
Hoşgeldiniz: {{$isim}}
View dosyamızda javascript ile json verisi oluşturmak isteyebiliriz. Blade Yapısı olmadan bu işlemi öyle yapıyoruz.
<script>
var app = <?php echo json_encode($dizi); ?>;
</script>
Blade yapısı ile ise şu şekilde yapabiliriz.
<script>
var app = @json($dizi);
var app = @json($dizi, JSON_PRETTY_PRINT);
</script>
{{ }} şeklinde değeri ekrana yazdırdığımız zaman eğer içerisinde html kodları varsa bile blade yapısı bunları string olarak okur ve ekrana string olarak yazdırır. ASlında bu komut htmlspecialchars metodu kullanılarak geliştirilmiştir. Bazı durumlarda biz sayfamıza html etiketlerini gönderip tarayıcının bunu string olarak değil de html kodu olarak okumasını isteyebiliriz. Bu durumda blade yapısının {!! !!} özelliğini kullanabiliriz.
Aşağıdaki örneği inceleyelim.
route kodumuz:
Route::get('/', function () {
$html= "<h4>Zafer</h4>";
return view('index', ['kisi'=>$html]);
});
index.blade.php view dosyamız:
Hello, {{$kisi}}.
//Çıktı: <h4>Zafer</h4>
Eğer böyle kullanırsak ekranda $html değişkeni direk string olarak yazılacaktır.
Ama blade yapısının html decode komutunu kullanırsak şu şekil bir sonuç elde ederiz.
{!! $kisi !!}
//Çıktı: Zafer
Blade yapısı bizlere koşullu ifadeler kullanmak için de kolaylıklar sağlar. @if, @elseif ve @else komutlarını kullanarak kolayca koşullu ifadelerimizi yazabiliriz
@if ($sayi == 10)
<h4>Ssyı değerimiz 10</h4>
@elseif($sayi == 15)
<h4>Sayı değerimiz 15</h4>
@else
<h4>Sayı değeri bilinmiyor</h4>
@endif
Ayrıca laravel oturum kontrolü sağlamak için @unless adında güzel bit metot sağlar.
@unless (Auth::check())
Oturum açmadınız.
@endunless
Php derslerinde anlatmıştım. Gene de kısaca bahsetmek gerekirse isset değişkenin tanımlanıp tanımlanmadığını, empty ise değişkenin değerinin boş olup olmadığını kontrol etmek için kullanılır.
Laravel blade yapısı ise @isset ve @empty komutları ile bu işlemi kolayca yapmamızı sağlayabilir.
@isset($dizi)
// dizi varsa bura çalışır
@endisset
@empty($dizi)
//dizi var ancak içeriği boşsa bura çalışır
@endempty
@auth ve @guest direktifleri kullanıcının oturum açıp girdiğini mi yoksa misafir mi olduğunu anlamak için kullanılabilir.
@auth
//Kullanıcı giriş yapmış
@endauth
@guest
// Kullanıcı giriş yapmamış
@endguest
Layout yapısında kullandığımız section tanımlarının var olup olmadığını kontrol etmek için @hasSection direktifini kullanabiliriz.
@hasSection('header')
<div class="pull-right">
@yield('header')
</div>
<div class="clearfix"></div>
@endif
@Switch, @case, @break, @default ve @endswitch direktifleri kullanılarak anahtar ifadeleri oluşturulabilir:
@switch($i)
@case(1)
Birinci case
@break
@case(2)
İkinci case
@break
@default
Varsayılan case
@endswitch
Blade yapısında @for ifadesi ile for döngüsünü kullanabiliriz.
@for ($i = 0; $i < 10; $i++)
Değer: {{ $i."<br>"}}
@endfor
@foreach ifadesi ile foreach döngüsünü kullanabiliriz.
@foreach ($kisileras $kisi)
<p>Kullanıcı sırası: {{ $kisi->id }}</p>
@endforeach
Eğer dizi tanımlı değilse uzun uzun if koşulu yazmak yerine @forelse kullanarak bu işlemi tek satırda kontrol edebiliriz.
@forelse ($users as $user)
<li>{{ $user->isim}}</li>
@empty
<p>Kullanıcı yok</p>
@endforelse
@while ifadesi ile while döngüsünü kullanabiliriz.
@while (true)
<p>Döngü</p>
@endwhile
Döngüleri kullanırken @continue ve @break ifadeleri ile döngüyü sonlandırabilir ya da o anki değeri atlayabiliriz.
@foreach ($users as $user)
@if ($user->type == 1)
@continue
@endif
<li>{{ $user->name }}</li>
@if ($user->number == 5)
@break
@endif
@endforeach
Bu işlemi daha kısa şekilde halletmek istiyorsak şu şekilde de yazabiliriz.
@foreach ($users as $user)
@continue($user->type == 1)
<li>{{ $user->name }}</li>
@break($user->number == 5)
@endforeach
Blade Yapısı Döngü Değişkenleri
Döngü yaparken, döngünüzün içinde bir $ döngü değişkeni mevcut olacaktır. Bu değişken, geçerli döngü indeksi ve bunun döngü boyunca ilk veya son yineleme olup olmadığı gibi bazı yararlı bilgi bitlerine erişim sağlar:
@php
$dizi = array(1, 2, 3, 4, 5);
@endphp
@foreach ($dizi as $dizi)
@if ($loop->first)
Birinci değer
@endif
@if ($loop->last)
Son değer:
@endif
<p>Bu değer {{ $dizi }}</p>
@endforeach
Eğer iç içe döngü kullanıyorsak üstteki döngünün değerine parent nesnesi ile ulaşabiliriz.
@foreach ($users as $user)
@foreach ($user->posts as $post)
@if ($loop->parent->first)
Üstteki döngünün ilk değeri
@endif
@endforeach
@endforeach
Yorum satırı eklemek istiyorsak blade yapısında şu komutu kullanabiliriz.
{{-- Burası yorum olarak görünür. --}}
@include komutu ile view dosyamıza başka bir view dosyasını dahil edebiliriz.
Dahil ettiğimiz view dosyasındaki kodlar bu sayede sayfamıza dahil olmuş olacaktır.
<div>
@include('header')
<form>
<!-- Form Contents -->
</form>
</div>
Eğer dahil ettiğimiz sayfa bizden veri istiyor ise include metodunun 2. parametresine istenen değeri dizi şeklinde iletebiliriz.
@include('view.isim', ['status' => 'tamam'])
Eğer dahil etmeye çalıştığımız dosya yoksa laravel hata verecektir. Dosyanın varlığını kontrol edip dahil etmek için ise aşağıdaki komutu kullanabiliriz.
@includeIf('view.isim', ['status' => 'tamam'])
Eğer bir işlemin true veya false olma durumuna göre view dahil edeceksek includeWhen komutunu kullanabiliriz.
@includeWhen($boolean, 'view.isim', ['status' => 'tamam'])
@includeUnless($boolean, 'view.name', ['status' => 'tamam'])
Bazı durumlarda view dosyamızda php kodları yazmamız gerekebilir. Bunu @php ifadesi ile yapabiliriz.
@php
$isim="Zafer Yıldız"
@endphp