Başlarken
Görünüm ve Arayüz
Veritabanı ve ORM
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'ninhtmlspecialcharsfonksiyonundan 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')