- vừa được xem lúc

Tìm hiểu về Livewire trong Laravel

0 1 229

Người đăng: Lê Xuân Quang

Theo Viblo Asia

Giới Thiệu

Livewire là một full-stack framework cho Laravel giúp việc xây dựng các giao diện động trở nên đơn giản hơn. Đây là một stack tuyệt vời để lựa chọn nếu bạn muốn xây dựng một SPA nhưng cảm thấy khó khăn khi tìm hiểu về các framework như React.js và Vue.js.

Để hiểu rõ hơn về Livewire và cách hoạt động của nó thì chúng ta cùng xây một ứng dụng live search user. Chúng ta cùng bắt đầu ngay nào.

Install project và tạo database

Phiên bản Livewire 2.x hiện tại yêu cầu laravel 7.0 nên chúng ta sẽ tạo một project laravel 7

composer create-project --prefer-dist laravel/laravel:^7.0 livewire

Sử dụng seeder và factory để tạo ra dữ liệu cho bảng user

class DatabaseSeeder extends Seeder
{ public function run() { factory(App\User::class, 20)->create(); }
}

Tiến hành chạy migrate và seeder để tạo dữ liệu

php artisan migrate
php artisan db:seed

Install Livewire

Install package livewire thông qua câu lệnh

composer require livewire/livewire

Tạo file config của livewire

php artisan livewire:publish --config

Tạo tệp assets của livewire trong public

php artisan livewire:publish --assets

Tạo component và triển khai ứng dụng

Chúng ta sẽ tạo một component Search để phục vụ cho việc search và hiển thị danh sách các user

php artisan make:livewire Search

Khi tạo component Search thì Livewire sẽ tạo ra hai file:

namespace App\Http\Livewire; use Livewire\Component; class Search extends Component
{ public function render() { return view('livewire.search'); }
}
<div> ...
</div>

Nhìn vào code của hai file chúng ta có thể thấy hàm render của class Search dùng để hiển thị view của component search.

Chúng ta cần chỉnh sửa hai file trên để thực hiện chức năng live search

namespace App\Http\Livewire; use Livewire\Component;
use App\User; class Search extends Component
{ public $search = ''; public function render() { return view('livewire.search', [ 'users' => User::where('name', 'like','%'.$this->search.'%')->get(), ]); }
}
<div> <input wire:model="search" type="text" placeholder="Search users..."/> <ul> @foreach($users as $user) <li>{{ $user->name }}</li> @endforeach </ul>
</div>

Chúng ta có thể thấy được từ khóa quan trọng là wire:model="search", đây là một directive của Livewire. Nó hoạt động mỗi khi giá trị trong thẻ input thay đổi thì thuộc tính search trong class Search sẽ thay đổi theo giá trị của thẻ input với điều kiện thuộc tính search là public. Ví dụ chúng ta nhập vào ô input một chuỗi "Quang" thì giá trị $search = "Quang"$search sẽ được cập nhật liên tục khi ta nhập vào.

Khi $search thay đổi có nghĩa là Livewire đã gửi một ajax request tới server, khi đó hàm render() sẽ chạy và cập nhật lại danh sách user tìm được theo biến $search và trả dữ liệu về cho component search

Tạo một file list-user.blade.php và một route để hiển thị ô input và danh sách user.

<html> <head> @livewireStyles
</head>
<body> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> @livewire('search') </div> </div> </div> @livewireScripts
</body>
</html>
Route::get('/users', function () { return view('list-user');
});

Trong đó @livewireStyles@livewireScripts dùng để include css và js của Livewire vào trong trang web, còn @livewire('search') dùng để include component search.

Bạn hãy mở trình duyệt lên và xem kết quả đã thực hiện được.

Nếu như bạn gặp vấn đề trang web không hoạt động có thể trang web của bạn không thể khởi tạo new Livewire() do quá trình nhúng javascript của livewire vào trang web bị lỗi, không tìm được đường dẫn chính xác tới file js. Hãy vào file config/livewire.php và chỉnh sửa key 'asset_url' = env('APP_URL'), có thể thay env('APP_URL') bằng một đường link cụ thể tương ứng với project của bạn.

Một số Directive thường dùng của Livewire

  • wire:click="foo" Nhận sự kiện click chuột và chạy hàm foo bên trong component.
  • wire:keydown.enter="foo" Nhận sự kiện keydown của phím enter và chạy hàm foo bên trong Component.
  • wire:foo="bar" Lắng nghe một sự kiện của trình duyệt được gọi là "foo". (Bạn có thể lắng nghe bất kỳ sự kiện DOM nào của trình duyệt - không chỉ những sự kiện do Livewire kích hoạt).
  • wire:model="foo"Giả sử $foo là một thuộc tính công khai trên lớp thành phần, mỗi khi một phần tử input với chỉ thị này được cập nhật, thuộc tính sẽ đồng bộ hóa với giá trị của nó.
  • wire:init="foo" Chạy phương thức foo() trong component ngay sau khi nó hiển thị trên trang web.

Tổng Kết

Vậy là chúng ta đã hoàn thành một ứng dụng live search đơn giản với live wire. Qua quá trình thực hiện thì có thể thấy Livewire là một frame work mạnh mẽ khá dễ sử dụng và có nhiều tính năng, đáng để nghiên cứu trong tương lai. Cảm ơn các bạn đã theo dõi bài viết, hy vọng chúng ta sẽ gặp lại ở những bài viết tiếp theo.

Tài liệu tham khảo: https://laravel-livewire.com/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tải cả thư viện sách lên website chỉ trong 1 nốt nhạc với Laravel!

Giới thiệu bài toán:. Sau nhiều giờ ngồi upload từng cuốn e-book lên website - 1 việc cần thiết nhưng thật sự tốn thời gian.

0 0 44

- vừa được xem lúc

DataTable và Laravel

1. Giới thiệu:.

0 0 96

- vừa được xem lúc

Hướng dẫn làm chức năng đăng ký tài khoảng bằng cách xác thực email với mã OTP giống như Facebook bằng Laravel 8x

Xin chào tất cả mọi người, mình sẽ hướng dẫn mọi người làm chức năng gửi gmail xác thực người dùng bằng mã OTP giống như Facebook bằng Laravel 8x.Bài viết này dành cho người đã từng học qua Laravel cơ

0 0 43

- vừa được xem lúc

Câu chuyện về caching trong laravel

Caching là gì, tại sao phải caching. Laravel có thể caching những gì.

0 0 65

- vừa được xem lúc

Tìm hiểu về Service Container trong Laravel

I - Service Container là gì . liên kết những thứ chúng ta cần để ứng dụng Laravel một cách trơn chu.

0 0 37

- vừa được xem lúc

Thêm thẻ div trong foreach Vue.js

Laravel. Mình lấy 5 bài viết ra từ file .vue với mã sau :. <div v-if="!isLoading" class="owl-carousel" id="owl-slider">.

0 0 28