Laravel CRUD và Vue3

Tram Ho

Xin chào các bạn, mình đã từng có một bài viết nói về CRUD với livewire tại đây rồi : https://b29.vn/bai-viet/laravel-crud-don-gian-voi-livewire?id=34, hôm nay mình sẽ hướng dẫn các bạn làm một project nhỏ về CRUD với Vue Js.

Chúng ta sẽ sử dụng :

  • Laravel 8 cho phần build API và build source FE tích hợp vào Laravel
  • Tailwind Css để làm giao diện trong đẹp hơn. Thì lí do mình chọn thằng này vì mình sẽ sử dụng laravel/breeze nó sẽ tích hợp Tailwind sẵn :V
  • Vue 3. Lí do mình chọn vue 3 là bởi vì vue3 sẽ có các tính năng mới hay ho mà mình sẽ dùng trong bài này như Composition API, Reactive Variables with ref..

Setup Api

1. Cài breeze và setup model

Thì đầu tiên chúng ta sẽ chuẩn bị một project Laravel thông qua composer :

Tiếp theo, để sử dụng mau lẹ authenticate. mình sẽ sử dụng laravel/breeze để lo nốt

Sau khi cài xong, bạn cần chạy php artisan breeze:install cái này nó sẽ publish các thứ liên quan đến auth như routes, controller, views ….

Project này mình sẽ làm CRUD company, nên sẵn mình sẽ migrate luôn company:

Vì là làm chức năng đơn giản nên chúng ta chỉ cần chừng này field là đủ. Xong rồi thì chạy migrate thôi php artisan migrate

OK xong xuôi thì mình sẽ chạy

Để test thử chức năng auth của breeze xem nó hoạt động không nhé.

OK, sau khi chạy project xong, mình đã thử đăng kí và được như này, nhìn giao diện khi sử dụng tailwind nó bát mắt hơn phải không :v

À nhớ thêm $fillable vào model nhé.

2. Setup API

Vì là api, nên chúng ta sẽ tạo controller theo cách sau để nó gen code phục vụ cho api :

Thì với cách tạo như vậy với 3 options --api --resource --model=Company, chúng ta sẽ có một controller với các method chuẩn resource api và model binding. Và tạo thêm một class Resource để phục vụ cho việc transforming data :

Ví đây là một ứng dụng đơn giản, nên mình chỉ tạo CRUD đơn giản cho các bạn, do đó ta sẽ có CompanyController như sau :

À đừng quên tạo CompanyRequest nhé : php artisan make:request CompanyRequest

OK, vậy test thử 2 Api Create và List thử nha :   OK ngon lành.

3. Setup Vue

Thì Api mình chỉ define đơn giản như vậy thôi, bây giờ chúng ta qua phần vue nhé, chúng ta phải cài đặt vue và các thư viện cần thiết :

Điều này sẽ giúp chúng ta cài đặt vue3 cho dự án, cùng xem file package.json nhé :

Tiếp đó, bạn cần config lại webpack.mix.js:

VIệc thêm .vue() vào trong mix sẽ giúp bạn load vuejs khi tải trang kèm trong mix laravel.

Chúng ta sẽ khởi tạo app Vue bên trong file app.js, và nhớ là hãy khai báo một id="app" cho một element mà bạn muốn Vue hoạt động trong đó nhé

Để tận dụng các file đã có sẵn, mình sẽ khai báo luôn <router-view /> bên trong file resources/views/dashboard.blade.php luôn nhé :

Việc đặt <router-view /> như vậy sẽ làm cho các component của chúng ta sẽ được render vào đó.

4. Setup component, router và chạy thử

Bây giờ chúng ta sẽ tạo một component và router để test xem có chạy không nhé :

Tạo component

Setup router

Chỉ cần khai báo component, và router vào file app.js nữa là xong :

OK, npm run dev xem thử nó có hoạt động không nhé :  Thì như bạn thấy đó, nó đã chạy rồi.

Thực hiện CRUD

Vậy các bước setup đã hoàn tất, bây giờ chúng ta sẽ, do chúng ta sẽ sử dụng các Composiion api nên sẽ chia ra một file cho dễ quản lí và đặt nó tại resources/js/composables/companies.js

1. Tạo các hàm thực thi việc xử lý với Vue Composition API

Bên trên là mình sẽ định nghĩa cho các hàm nhằm phục vụ cho việc CRUD company. Đọc thì cũng dể hiểu thôi phải không? không có gì phức tạp cả.

2. Company list

Kết quả :

2. Create/edit company

Tiếp theo chúng ta sẽ tiến hành xử lý phần tạo và edit company nhé. Đầu tiên ta sẽ tạo ra một component chứa Form chung :

Company Company create

Company Company edit

OK vậy là xong 2 cái form, việc còn lại bây giờ là thêm route và thêm button để thao tác :

List :

Update / Create :

3. Xoá company

Về phần xoá, các bạn chỉ việc thêm button để gọi event xoá

Và thêm function xoá vào setUp() của list :

4. Khai báo lại route của Laravel

Khi các bạn sử dụng SPA trong laravel, bạn cần phải khai báo lại route, vì mục đích chúng ta sẽ sử dụng route của Vue-router là chính

OK mọi việc đã xong, các bạn test lại xem nào

Kết

Vậy thì mình cũng hướng dẫn xong các bạn cách tạo một CRUD đơn giản bằng laravel và vue3 rồi. Hi vọng nó sẽ giúp ích được cho các bạn, mình chỉ đang tìm hiểu về Composition API của vue, nên có gì sai sót mong mọi người bỏ qua. Cảm ơn các bạn đã ủng hộ mình, hi vọng chúng ta cũng sẽ gặp lại trong những bài kế tiếp .

Repository : https://github.com/nguyenthuong1304/crud_vue3

Tham khảo :

Chia sẻ bài viết ngay