Blade Template

Blade Template

240 Okunma Laravel Emir Gökkaya

Blade, Laravel ile birlikte gelen basit ama güçlü bir şablonlama motorudur. Yani, view dosyalarında PHP kodları yerine, kendine özgü sözdizimini kullanarak daha okunaklı ve daha kolay kod yazmamızı sağlar. Diğer PHP şablonlama motorlarının aksine, Blade, view da düz PHP kodu kullanmamızı da engellemez.

Blade Templates yapısıyla yazılan tüm kodlar daha sonra PHP koduna derlenmek için önbelleğe alınır. Yani yazılan kodlarımız derlenir ve saf PHP kodlarına dönüştürülür.

Blade Templates, view dosyaları .blade.php dosya uzantısını kullanır. Genelde resources/views dizini altında bulunurlar.

Şablon Kalıtımı

Blade motorunun birincil kullanım amaçlarından biri şablon kalıtım özelliğine sahip olmasıdır. Yani, blade dosyalarını birbirinin içine kalıtım olarak ekleyebiliyoruz. Örneğin bir web uygulaması geliştiriyoruz ve projemizde birçok farklı sayfa mevcut. Fakat her sayfada footer ve header kısımları hiç değişmiyor. Sürekli her view dosyamıza aynı alanları doldurmak zorundayız. Fakat Blade yapısı biz tekrarlanan alanları bir blade dosyasına yazıp diğer tüm dosyalarda bu dosyayı çağırmamıza imkan tanır. İşte bu yapıya layout denilmektedir.

Şimdi proje dosyalarımızda resources/views/ dizini içerisinde bir layout dizini oluşturalım ve içerisine master.blade.php dosyası ekleyelim;

<html>
    <head>
        <title>App Name - @yield('title')</title>
    </head>
    <body>
        @section('sidebar')
            This is the master sidebar.
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

Evet, dosyamızın içerisinde alışık olmadığımız bazı sözdizimleri var. Şimdi bunları inceleyelim;

  • @yield('title'): Bu kısım yani title, bizim bu dosyayı kalıtım alan diğer blade dosyaları içersinde doldurulacağını belirtir.
  • @section('sidebar') ... @show :Bu kısım ise sidebar adında varsayılan içeriği olan bir alan tanımlar. Eğer bu kısım mastere kalıtım alan dosyalar tarafından kullanılmazsa buradaki içerik otomatik olarak eklenecektir.
  • @yield('content'): content adında bir alan oluşturur ve belirtilen kısmın bu blade i miras alan diğer bladeler tarafından doldurulacağını ifade eder.

Bir Blade Dosyasından Kalıtım Almak

Yukarıdaki master kısmından kalıtım alan child bir blade dosyası oluşturalım.

@extends('layouts.master')
@section('title', 'Page Title')
@section('sidebar')
    @parent
    <p>This is appended to the master sidebar.</p>
@endsection
@section('content')
    <p>This is my body content.</p>
@endsection

Yukarıdaki direktifleri açıklayalım şimdi;

  • @extends('layouts.master'): layouts dizini içerisindeki master.blade.php dosyasından kalıtım alır, yani içeriğini aynen getirir.
  • @section('title', 'Page Title'): master.blade.php dosyasındaki title alanına verilecek değeri alır.
  •  
  • @section('sidebar') @parent ... @endsection: Bu kısımda sidebar içeriğini doldururuz. İçerisindeki @parent bölümü ise master dosyasında bu bölümde mevcut olan içeriği getir.
  • @section('content'): Burası da content alanını değiştirmemizi sağlar.

@yield('content', View::make('view.name')):Bu şekilde bir tanımda ise content adında bir alan bulamazsa ikinci parametreyi uygula anlamına gelmektedir.

Veriyi Görüntüleme

Biz blade dosyalarını, genellikle veritanından gelen verileri görüntülemek için kullanacağız.

Peki bu view dosyalarına veriyi nasıl göndereceğiz?

Tabi ki controller aracılığla göndereceğiz. Fakat biz örneğimizde veritabanından bir değer çekmeyeceğimiz için şimdilik web.php, yani route üzerinden göndereceğiz.

Route::get('/', function () {
    return view('index', ['company' => 'Partum Yazılım']);
});

Bu veriyi de blade dosyasında aşağıdaki şekilde kullanırız;

Bilgi almak için {{ $company }}, iletişim sayfasından bize ulaşabilirsiniz.

Varsayılan olarak, Blade {{}} ifadeleri, XSS saldırılarını önlemek için PHP'nin htmlspecialchars işlevi aracılığıyla otomatik olarak gönderilir. Verilerinizin budan etkilenmesini istemiyorsanız, aşağıdaki sözdizimini kullanabilirsiniz;

Bilgi almak için {!!company !!}, iletişim sayfasından bize ulaşın.

Koşullu Durumlar

Yeri geldiğinde kullandığımız koşul ifadeleri için @if, @elseif, @else ve @endif direktifleri kullanırız.

@if (count($records) === 1)
    I have one record!
@elseif (count($records) > 1)
    I have multiple records!
@else
    I don't have any records!
@endif

Kolaylık sağlamak için, Blade ayrıca @unless direktifini de sağlar:

@unless (Auth::check())
        You are not signed in.
        @endunless

Kimlik Doğrulama Direktifleri

@auth ve @guest direktifleri geçerli kullanıcının kimliğinin doğrulanmış olup olmadığını veya misafir kullanıcı olup olmadığını hızlı bir şekilde belirtmek için kullanılır;

@auth('admin')
    // The user is authenticated...
@endauth

@guest('admin')
    // The user is not authenticated...
@endguest

Yorum Satırları

Blade dosyalarımızda yorum satırı oluşturarak kendimiz için bilgilendirmeler tutabiliriz. Bu satırlar istemciye ulaşmaz sadece biz erişebiliriz. {{-- Yorum satırı --}}

Döngüler

Dizi ya da bir tabloyu listelemek veya onlar üzerinde işlemler yapmak için döngüleri kullanabiliriz.

@for ($i = 0; $i < 10; $i++)
    The current value is {{ $i }}
@endfor
@foreach ($users as $user)
    <p>This is user {{ $user->id }}</p>
@endforeach
@forelse ($users as $user)
        <li>{{ $user->name }}</li>
        @empty
        <p>No users</p>
        @endforelse

Form İşlemleri

Uygulamalarımızda bir HTML formu tanımladığımızda, CSRF koruma ara yazılımı isteğini doğrulayabilmesi için forma gizli bir CSRF belirteci eklemeliyiz. Belirteç alanını oluşturmak için @csrf direktifini kullanırız. Bu işlem sayesinde şifreli bir token döner ve gönderilen form koruma altına alınmış olur;

<form method="POST" action="/profile">
    @csrf

    ...
</form>

Yığınlar

Blade, başka bir görünümde veya düzende başka bir yerde işlenebilecek adlandırılmış yığınları kullanmamıza olanak sağlar. Bu şekilde sayfalara özel kullandığımız Javascript kütüphanelerini belirlemek için olduça yararlı bir direktiftir;

<head>
    <!-- Head Contents -->

    @stack('scripts')
</head>
@push('scripts')
    <script src="/example.js"></script>
@endpush

Daha fazla bilgi için Laravel blade sayfasına buradan gidebilirsiniz.

Referanslarımızı incelemek ister misiniz?
Bitirmekten keyif aldığımız ve yeni tecrübeler kazandığımız projelerimiz.