Laravel Livewire: Full-Stack Components Olmadan JavaScript
z
zafer ak
Yazar
10 November 2025
3 dakika okuma
2 görüntülenme
Livewire ile dinamik UI components. Real-time validation, modals, pagination ve Alpine.js entegrasyonu.
Livewire Nedir?
Livewire, Laravel için full-stack framework'tür. JavaScript yazmadan dinamik, reactive interfaces oluşturmanızı sağlar.
Kurulum
composer require livewire/livewire
# Layout'a ekle
@livewireStyles
@livewireScripts
İlk Component
# Oluştur
php artisan make:livewire Counter
// app/Livewire/Counter.php
class Counter extends Component
{
public int $count = 0;
public function increment()
{
$this->count++;
}
public function render()
{
return view('livewire.counter');
}
}
// resources/views/livewire/counter.blade.php
<div>
<h1>{{ $count }}</h1>
<button wire:click="increment">+</button>
</div>
// Blade'de kullan
<livewire:counter />
Two-Way Data Binding
class SearchUsers extends Component
{
public string $search = '';
public function render()
{
return view('livewire.search-users', [
'users' => User::where('name', 'like', "%{$this->search}%")->get()
]);
}
}
// View
<input type="text" wire:model.live="search" placeholder="Ara...">
@foreach($users as $user)
<div>{{ $user->name }}</div>
@endforeach
Form Validation
class CreatePost extends Component
{
public string $title = '';
public string $content = '';
protected $rules = [
'title' => 'required|min:3',
'content' => 'required|min:10',
];
public function save()
{
$validated = $this->validate();
Post::create($validated);
session()->flash('message', 'Post oluşturuldu!');
return redirect()->to('/posts');
}
}
// View
<form wire:submit="save">
<input wire:model="title" type="text">
@error('title') <span>{{ $message }}</span> @enderror
<textarea wire:model="content"></textarea>
@error('content') <span>{{ $message }}</span> @enderror
<button type="submit">Kaydet</button>
</form>
Loading States
<button wire:click="save">
<span wire:loading.remove>Kaydet</span>
<span wire:loading>Kaydediliyor...</span>
</button>
<div wire:loading wire:target="search">
Aranıyor...
</div>
Alpine.js Entegrasyonu
<div x-data="{ open: false }">
<button @click="open = true">Modal Aç</button>
<div x-show="open" @click.away="open = false">
<livewire:edit-user :user="$user" />
</div>
</div>
File Uploads
use WithFileUploads;
public $photo;
public function save()
{
$this->validate(['photo' => 'image|max:1024']);
$this->photo->store('photos');
}
// View
<input type="file" wire:model="photo">
@if ($photo)
<img src="{{ $photo->temporaryUrl() }}">
@endif
Pagination
use WithPagination;
public function render()
{
return view('livewire.posts', [
'posts' => Post::paginate(10)
]);
}
// View
{{ $posts->links() }}
Sonuç
Livewire, Vue/React öğrenmeden dinamik UI oluşturmak için mükemmel. Laravel ekosistemiyle tam uyumlu.