Module trong Laravel là gì
Module trong Laravel là một chức năng được phát triển từ Laravel 5 và được sử dụng để quản lý từng chức năng nhỏ trong các dự án lớn. Tương tự như Package thì mỗi Module trong Laravel cũng có Views, Controller và Models của riêng nó.
Lợi ích của sử dụng Module đó chính là có thể quản lý dự án bằng theo các chức năng nhỏ, như thế trong các dự án lớn cần nhiều team và kỹ sư phát triển, thì mỗi người có thể độc lập phát triển các module nhỏ như vậy, sau đó lắp ráp lại mà không ảnh hưởng tới các phần khác của dự án.
Khi chức năng Module được ra mắt ở Laravel 5, khi đó không có nhiều Package được phát triển để quản lý nó. Bởi vậy các nhà phát triển thường phải tự tạo ra Module theo cách thủ công để sử dụng.
Ở bài viết này, Kiyoshi sẽ chia sẻ cách tạo một Module theo cách thủ công. Các bạn muốn tìm hiểu cách sử dụng Package để quản lý Module có thể tham khảo bài viết sau đây:
Cấu hình Module trong Laravel
Bước 1: Tạo folder mới chứa mã nguồn Module
Tạo folder mới có tên Modules tại thư mục gốc của Project.
Folder trên sẽ dùng để chứa các mã nguồn dùng để quản lý module, bao gồm View, Controller và Module của nó.
Lưu ý bạn có thể thay đổi tên và đường dẫn của folder trên nếu cần thiết. Tuy nhiên để thống nhất thì Kiyoshi khuyên bạn nên dùng cấu trúc này.
Bước 2: khai báo Module trong composer.json
Sau khi tạo folder này, chúng ta cần khai báo nó trong mục autoload/psr-4
ở file composer.json
.
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"Modules\\": "Modules/"
}
},
Sau khi thay đổi file composer.json
, đừng quên chạy lệnh sau để app cũng thay đổi theo.
composer dump-autoload
Bước 3: Khai báo service provider cho Module
Bước tiếp theo chúng ta cần khai báo service provider cho Module bằng cách thêm dòng code sau vào file config/app.php
.
'providers' => [
...
/*
* Custom Service Providers...
*/
'Modules\ServiceProvider',
]
Tạo các module trong Laravel
Sau khi hoàn thành cấu hình Module, chúng ta sẽ có một thư mục tổng dùng để chứa và quản lý tất cả các module dùng trong dự án, với mỗi module này dùng để quản lý một chức năng khác nhau, và có các Controllers, Views, Models cũng như các file quản lý riêng biệt.
Do là cách thủ công, nên chúng ta cần tự tạo ra các folder mới tương ứng với từng module. Ví dụ như tạo module User và Category chẳng hạn.
app/
Modules/
├── Category
│ ├── Controllers
│ │ └── CategoryController.php
│ ├── Models
│ │ └── Category.php
│ ├── Resources
│ │ ├── views
│ │ └── index.blade.php
│ ├── Routes
│ └── web.php
├── User
│ ├── Controllers
│ │ └── UserController.php
│ ├── Models
│ │ └── User.php
│ ├── Resources
│ │ ├── views
│ │ └── index.blade.php
│ ├── Routes
│ └── web.php
└── ServiceProvider.php
....
Chỉnh sửa các file quản lý Module
Ở phần trên chúng ta có thể thấy, trong mỗi module sẽ chứa các file riêng biệt để quản lý, trong đó bao gồm như file Controller, Views, Modules hoặc Routes chẳng hạn.
Các file này có cách viết và chức năng hoàn toàn tương tự với các file Controller, Views, Modules, Routes khác mà chúng ta hay thấy trong thư mục gốc và thư mục app
của Laravel. Điểm khác biệt ở đây là phạm vi sử dụng của chúng chỉ giới hạn trong module chứa chúng, được thể hiện thông qua việc khai báo namespace của chúng.
Ví dụ, để hiển thị file view index.blade.php
ra màn hình, chúng ta có thể chỉnh sửa routes, views và controller như sau:
Tạo file index.blade.php
Module\Category\Resources\views\index.blade.php
<h1>Hello World</h1>
<p>
This view is loaded from Category module
</p>
Tạo function index để xử lý view trong controller
Module\Category\Controllers\CategoryController.php
<?php
namespace Modules\Category\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class CategoryController extends Controller{
public function index()
{
return view('category::index');
}
}
Khai báo route
Module\Category\Routes\web.php
<?php
use Modules\Category\Controllers\CategoryController;
Route::get('/index', 'CategoryController@index');
Cuối cùng, hãy truy cập http://yourdomain.dev/category/index để tận hưởng thành quả.
Tổng kết
Trên đây Kiyoshi đã chia sẻ cách tự tạo Module trong Laravel theo cách thủ công rồi. Hi vọng nó sẽ hữu ích cho mọi người.
Bình luận