Görünüm ve Arayüz Sürüm: 11.x
Topluluk Dokümantasyonu

Blade Şablon Motoru

Özet: Laravel Blade şablon motoru, şablon kalıtımı, bileşenler (components), direktifler ve dinamik veri görüntüleme.

Blade Şablon Motoru

Blade, Laravel ile birlikte gelen güçlü ve zarif bir şablon motorudur. Diğer popüler PHP şablon motorlarının aksine Blade, şablonlarınızda saf PHP kodu kullanmanızı kısıtlamaz. Aslında tüm Blade şablonları saf PHP koduna derlenir ve değiştirilene kadar önbelleğe alınır; bu da uygulamanıza neredeyse sıfır ek yük getirir.

Blade görünüm dosyaları .blade.php dosya uzantısını kullanır ve genellikle resources/views dizininde saklanır.


Veri Görüntüleme

Blade görünümlerine iletilen verileri süslü parantezler arasına alarak ekrana yazdırabilirsiniz:

Merhaba, {{ $name }}!

Güvenlik Notu: Blade'in {{ $name }} sözdizimi, XSS (Cross-Site Scripting) saldırılarını önlemek için çıktıyı otomatik olarak PHP'nin htmlspecialchars fonksiyonundan geçirir.

Ham (Kaçışsız) Veri Görüntüleme

Verinizin XSS filtresinden geçirilmeden ham HTML olarak yazdırılmasını istiyorsanız aşağıdaki sözdizimini kullanabilirsiniz:

Merhaba, {!! $rawHtmlContent !!}.

Dikkat: Kullanıcı girdisi olan verileri yazdırırken asla {!! !!} sözdizimini kullanmayın.

JSON Dönüştürme

Dizileri veya koleksiyonları JavaScript değişkenlerine dönüştürmek için @json direktifini kullanabilirsiniz:

<script>
    var users = @json($users);
</script>

Blade Direktifleri

Şartlı İfadeler

Blade; @if, @elseif, @else ve @endif direktiflerini kullanarak şartlı kontroller oluşturmanızı sağlar:

@if (count($records) === 1)
    Bir adet kayıt bulundu.
@elseif (count($records) > 1)
    Birden fazla kayıt bulundu.
@else
    Hiç kayıt bulunamadı!
@endif

@unless Direktifi

unless ifadesi ters if koşulu (! $condition) anlamına gelir:

@unless (Auth::check())
    Giriş yapmadınız.
@endunless

Durum ve Kimlik Doğrulama Direktifleri

@isset($records)
    // $records tanımlı ve null değil...
@endisset

@empty($records)
    // $records boş...
@endempty

@auth
    // Kullanıcı giriş yapmış...
@endauth

@guest
    // Kullanıcı misafir (giriş yapmamış)...
@endguest

@production
    // Yalnızca üretim ortamında çalışır...
@endproduction

@env('staging')
    // Yalnızca staging ortamında çalışır...
@endenv

Döngüler

Blade, PHP'nin döngü yapılarını pratik direktiflerle sunar:

@for ($i = 0; $i < 10; $i++)
    Sayı: {{ $i }}
@endfor

@foreach ($users as $user)
    <p>Kullanıcı: {{ $user->name }}</p>
@endforeach

@forelse ($users as $user)
    <li>{{ $user->name }}</li>
@empty
    <p>Hiç kullanıcı bulunamadı.</p>
@endforelse

@while (true)
    <p>Sonsuz döngü...</p>
@endwhile

$loop Değişkeni

Bir @foreach döngüsü içinde Laravel size $loop adında özel bir sihirli değişken sağlar. Bu değişken döngünün durumu hakkında yararlı bilgiler sunar:

Özellik Açıklama
$loop->index Mevcut döngü indeksi (0'dan başlar).
$loop->iteration Mevcut iterasyon sayısı (1'den başlar).
$loop->remaining Döngüde kalan iterasyon sayısı.
$loop->count Döngüdeki toplam eleman sayısı.
$loop->first İlk iterasyonda olup olmadığını (true/false) belirtir.
$loop->last Son iterasyonda olup olmadığını (true/false) belirtir.
$loop->even Çift numaralı iterasyon olup olmadığını belirtir.
$loop->odd Tek numaralı iterasyon olup olmadığını belirtir.
$loop->parent İç içe döngülerde üst döngünün $loop değişkenine erişir.

Örnek kullanım:

@foreach ($users as $user)
    @if ($loop->first)
        Bu ilk kullanıcıdır:
    @endif

    <div class="{{ $loop->even ? 'bg-gray' : 'bg-white' }}">
        {{ $loop->iteration }}. {{ $user->name }}
    </div>
@endforeach

Bileşenler (Blade Components)

Bileşenler ve slotlar; HTML bölümlerini tekrar kullanılabilir, bağımsız parçalara ayırmak için modern bir yöntem sunar.

Yeni bir bileşen oluşturmak için:

php artisan make:component Alert

Bu komut app/View/Components/Alert.php sınıfını ve resources/views/components/alert.blade.php görünümünü oluşturur.

Bileşen Kullanımı

Bileşenleri şablonlarınızda <x-component-name> etiketiyle çağırabilirsiniz:

<x-alert type="error" :message="$errorMessage" />

Slotlar ve İsimlendirilmiş Slotlar

Bileşeninize gövde içeriği aktarmak için $slot değişkeni kullanılır:

<!-- resources/views/components/card.blade.php -->
<div class="card">
    <div class="card-header">{{ $title }}</div>
    <div class="card-body">
        {{ $slot }}
    </div>
</div>

Bileşeni kullanırken:

<x-card>
    <x-slot:title>
        Kullanıcı Profili
    </x-slot:title>

    Buraya yazılan içerik $slot değişkeni olarak karta aktarılır.
</x-card>

Nitelikleri Yönetme ($attributes)

Bileşene eklenen ekstra HTML niteliklerini (class, id, data-*) birleştirmek için $attributes->class() veya $attributes->merge() kullanılır:

<!-- resources/views/components/button.blade.php -->
<button {{ $attributes->class(['btn', 'btn-primary' => $isPrimary]) }}>
    {{ $slot }}
</button>

Geleneksel Şablon Kalıtımı (@extends ve @section)

Laravel'de düzen (layout) oluşturmanın diğer bir yolu klasik şablon kalıtımıdır:

Ana Düzen (Layout) Tanımlama

<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html>
<head>
    <title>@yield('title', 'Varsayılan Başlık')</title>
</head>
<body>
    <header>
        @section('sidebar')
            Varsayılan menü
        @show
    </header>

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

Sayfa İçeriğini Genişletme

<!-- resources/views/home.blade.php -->
@extends('layouts.app')

@section('title', 'Ana Sayfa')

@section('sidebar')
    @parent
    <p>Ana sayfaya özel ek menü bağlantısı.</p>
@endsection

@section('content')
    <h1>Hoş Geldiniz!</h1>
    <p>Ana sayfa ana içerik alanı.</p>
@endsection

Alt Görünümleri Dahil Etme (@include)

Bir Blade şablonunu başka bir şablonun içine dahil etmek için @include direktifi kullanılır:

<div>
    @include('shared.errors')

    <form>
        <!-- Form elemanları... -->
    </form>
</div>

Belirli bir koşula bağlı olarak dahil etmek için:

@includeWhen($boolean, 'shared.header', ['status' => 'complete'])

@includeUnless($boolean, 'shared.warning')

@includeIf('shared.custom-banner')
Bu sayfa açık kaynaklı olarak topluluk tarafından güncellenmektedir.
Dokümantasyon Başına Dön ↑