Kiến trúc hệ thống trên Laravel – phần 10

Đây sẽ là 1 series gồm 1 số phần như sau:


Nhắc lại phần trước, chúng ta đã tách ra được thành các phần xử lý khác nhau, nhưng với mục tiêu là tạo ra các component dạng plug n play – tức là khi cần thì cắm vào, ko cần thì bỏ đi – thì chúng ta chưa đạt được, còn cần phải copy paste bằng tay rất nhiều. Do vậy chúng ta phải đóng gói phần đã làm thành 1 package và install qua composer.

Điều kiện cần: các bạn đọc kỹ hướng dẫn tạo package của Laravel giúp mình https://laravel.com/docs/5.4/packages

Rồi, giờ chúng ta sẽ biến BookCRUD của phần trước thành package.

I. CHỈNH SỬA CODE

1. Tạo mới project laravel và install package “jeroen-g/laravel-packager” bằng câu lệnh sau:

Rồi add dòng dưới đây vào providers array trong config/app.php

2. Tạo 1 package mới:

Chú ý: Laraviet sẽ là vendor name, còn BookCRUD sẽ là package name -> bạn sẽ cần phải update thông tin trong file “packages/Laraviet/BookCRUD/composer.json”

Những thông tin này là cần thiết để bạn có thể đăng ký với https://packagist.org/

Từ thời điểm này, chúng ta sẽ mặc định ở root folder là “packages/Laraviet/BookCRUD”, tất cả file và folder mình nói ở dưới sẽ trực thuộc root folder này nhá.

3. Tạo folder structure trong thư mục “src” tương ứng như sau

Move file “src/BookCRUDServiceProvider.php” vào folder “src/Providers” và update namespace tương ứng

4. Copy tất cả những file dưới đây (phần 9 chúng ta đã tạo) vào trong folder tương ứng. Kết quả cuối cùng sẽ được như sau

5. Update tất cả namespace, import.

> “Core\” –> “Laraviet\BookCRUD\”

Tip: Nếu sử dụng sublime text thì các bạn có thể sử dụng chức năng replace của editor này để replace all

Tương tự chúng ta sẽ update:

> “App\Http\Controllers” –> “Laraviet\BookCRUD\Controllers”

> “App\Http\Requests” –> “Laraviet\BookCRUD\Requests”

Mở file “src/Models/Book.php” và update namespace thành

Mở file “src/Repositories/BookRepository.php” và sửa phần import thành:

6. Update lại routes và thêm RouteServiceProvider

update “routes/web.php” chỉ giữ lại nội dung như sau

Thêm file “src/Providers/RouteServiceProvider.php” với nội dung sau:

Các bạn đọc nội dung chắc cũng đoán được là file này dùng để áp namespace của package vào các routes tương ứng.

7. Chỉnh sửa lại nội dung file “Providers/BookCRUDServiceProvider.php”

Nếu các bạn đọc hướng dẫn package development của Laravel thì những đoạn code trên khá là dễ hiểu, chỉ là load route, view, migration từ trong package mà không cần phải đặt vào đúng vị trí folder default của Laravel -> chính vì vậy mà sau khi install package này và đăng ký provider trong Laravel, những thành phần trên sẽ tự động được load ^^.

8. Chỉnh sửa lại “src/Controllers/BookController.php”

thay đổi tất cả những đoạn có render view từ

> return view(‘books….) –> return view(‘book-crud::books….)

*) PHẦN CHỈNH SỬA CODE đến đây là chấm dứt. Các bạn có thể thử chạy lại ngay trong project hiện tại của mình xem package đã chạy ổn chưa. Nếu chạy ổn rồi thì làm theo hướng dẫn dưới đây để tạo 1 composer package mới của riêng mình

II. REGISTER COMPOSER PACKAGE

1. Push toàn bộ code trong package mới tạo bao gồm thư mục “src” lên trên github

Mình đã push code của mình lên đây: https://github.com/laraviet/BookCRUD

2. Đăng ký với packagist

Sau khi register và login xong thì bạn click vào nút submit và paste link github vào rồi nhấn button Check

Sau đó hệ thống packagist sẽ đọc file composer.json của bạn và nhận ra package name, hệ thống sẽ thông báo, bạn thấy ok thì click nút submit là xong 🙂

3. Config để auto update version

Ngay sau khi bạn submit package lên, sẽ có dòng thông báo này hiển thị ở sreen tiếp theo

Bạn sẽ cần phải lấy token trong packagist và add hook vào trong github

Đầu tiên bạn vào profile của bạn trong packagist

Click vào nút “Show Api Token” và copy token này

Trở lại github, bạn vào phần setting của package

Chọn “Integrations & services” rồi add packagist như theo hình vẽ

Cuối cùng bạn chỉ cần paste lại token (bạn đã lưu từ packagist) vào rồi nhấn button “Add service” là xong

 

III. TEST LẠI PACKAGE VỚI NEW LARAVEL PROJECT

1. Tạo laravel project mới và chạy lại phần authen mặc định của Laravel (xem lại phần 9 để biết thêm chi tiết)

2. Cài đặt lại package mới được register ở packagist bằng câu lệnh

3. Đăng ký package service provider bằng cách thêm vào config/app.php

4. Chạy migration (nếu package có phần này)

5. Test lại package bằng cách vào route tương ứng:

…./books

Verify lại các chức năng của package xem có chuẩn chưa.

Các bạn thấy không? Mình chỉ cần install package, update service provider và chạy migration là xong, toàn bộ các chức năng đã chạy được, hoàn toàn chẳng cần copy-paste gì –> mục tiêu plug n play đã đạt được ^^.


Cuối cùng cũng kết thúc được series. Mệt quá đi mất. Hi vọng mọi người đã rút ra được nhiều điều bổ ích cho bản thân.

Cũng xin nói thật với các bạn, các kiến thức mình nêu trong series không phải là quá cao siêu gì, nhưng mình tin răng cùng đã bổ sung được 1 vài phần tạm coi là khác với thường ngày cho các bạn. Các bạn nên rèn luyện hàng ngày để nhuyễn với các kiến thức trên trước khi ngâm cứu các kiến thức nâng cao khác. Mình nghĩ cách nâng cao skill tốt nhất là “chậm mà chắc”, làm tới đâu phải vững tới đấy.

Chúc các bạn tiến nhanh trên con đường đau khổ này ^^. Một lần nữa, cám ơn tất cả mọi người đã follow mình đi từ đầu tới cuối trong series này.