> Anil Akin _
DE EN
Echtzeit-Features mit Laravel und Livewire: Interaktive UIs erstellen

Echtzeit-Features mit Laravel und Livewire: Interaktive UIs erstellen

Entdecke, wie du mit Laravel und Livewire moderne, reaktive Benutzeroberflächen ohne komplexes JavaScript erstellen.

Anil Akin
3 Min. Lesezeit
Laravel Frontend #Laravel #Livewire #Real-time #WebSockets #Interactive UI

Building Real-time Applications with Laravel Livewire

Livewire brings the simplicity of Laravel to the frontend, allowing you to build dynamic interfaces using familiar PHP syntax. This guide explores how to create real-time features that rival traditional JavaScript frameworks.

Understanding Livewire's Architecture

Livewire works by rendering components on the server and sending HTML updates to the browser via AJAX. This approach offers several advantages:

  • No JavaScript build step required
  • Full access to Laravel's features
  • SEO-friendly by default
  • Simplified state management

Creating Your First Livewire Component

Let's build a real-time search component:

php artisan make:livewire SearchUsers

Component class:

class SearchUsers extends Component
{
    public $search = '';
    public $users = [];

    public function updatedSearch()
    {
        $this->users = User::where('name', 'like', "%{$this->search}%")
            ->limit(5)
            ->get();
    }

    public function render()
    {
        return view('livewire.search-users');
    }
}

Real-time Validation

Livewire makes form validation feel instant:

class ContactForm extends Component
{
    public $name = '';
    public $email = '';
    public $message = '';

    protected $rules = [
        'name' => 'required|min:3',
        'email' => 'required|email',
        'message' => 'required|min:10',
    ];

    public function updated($propertyName)
    {
        $this->validateOnly($propertyName);
    }

    public function submit()
    {
        $this->validate();
        Contact::create($this->all());
        session()->flash('message', 'Contact form submitted!');
    }
}

Building a Real-time Dashboard

Create a dashboard that updates automatically:

class Dashboard extends Component
{
    public $stats = [];

    public function mount()
    {
        $this->loadStats();
    }

    public function loadStats()
    {
        $this->stats = [
            'users' => User::count(),
            'orders' => Order::whereDate('created_at', today())->count(),
            'revenue' => Order::whereDate('created_at', today())->sum('total'),
        ];
    }

    public function refreshStats()
    {
        $this->loadStats();
        $this->dispatch('stats-updated');
    }
}

Infinite Scrolling Implementation

Implement smooth infinite scrolling for content feeds:

class PostFeed extends Component
{
    public $posts = [];
    public $page = 1;
    public $hasMore = true;

    public function loadMore()
    {
        $newPosts = Post::latest()
            ->skip(($this->page - 1) * 10)
            ->take(10)
            ->get();

        if ($newPosts->count() < 10) {
            $this->hasMore = false;
        }

        $this->posts = array_merge($this->posts, $newPosts->toArray());
        $this->page++;
    }
}

WebSocket Integration with Broadcasting

Combine Livewire with Laravel Broadcasting for true real-time features:

class ChatRoom extends Component
{
    public $messages = [];
    public $newMessage = '';

    public function getListeners()
    {
        return [
            "echo:chat.{$this->roomId},MessageSent" => 'addMessage',
        ];
    }

    public function sendMessage()
    {
        $message = Message::create([
            'user_id' => auth()->id(),
            'room_id' => $this->roomId,
            'content' => $this->newMessage,
        ]);

        broadcast(new MessageSent($message))->toOthers();

        $this->messages[] = $message;
        $this->newMessage = '';
    }

    public function addMessage($event)
    {
        $this->messages[] = $event['message'];
    }
}

Performance Optimization

Keep your Livewire components fast with these techniques:

Defer Loading

class HeavyComponent extends Component
{
    public $readyToLoad = false;

    public function loadData()
    {
        $this->readyToLoad = true;
    }

    public function render()
    {
        return view('livewire.heavy-component', [
            'data' => $this->readyToLoad
                ? ExpensiveModel::all()
                : []
        ]);
    }
}

Computed Properties

class ProductList extends Component
{
    public $category = 'all';

    public function getProductsProperty()
    {
        return Cache::remember("products.{$this->category}", 300, function () {
            return Product::when($this->category !== 'all', function ($query) {
                $query->where('category', $this->category);
            })->get();
        });
    }
}

Advanced Techniques

  • File Uploads: Handle file uploads with progress indicators
  • Polling: Automatically refresh data at intervals
  • Transitions: Add smooth animations with Alpine.js
  • Nested Components: Build complex UIs with component composition

Conclusion

Livewire revolutionizes frontend development for Laravel developers, allowing you to build sophisticated, real-time interfaces without leaving the comfort of PHP. Its seamless integration with Laravel's ecosystem makes it an excellent choice for rapid application development.

Diesen Artikel teilen

Ähnliche Artikel