Bài viết Câu hỏi About RongvangIT
profile Pic
0
0

Đăng ngày:

  1002 Lượt xem

Tạo Module trong Laravel P1: cách thủ công

LaravelPHP

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ài viết cùng chuyên đề [ Module trong Laravel ]

kiyoshi
Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.

Bình luận

Bài viết chưa có bình luận. Hãy trở thành người bình luận đầu tiên!
Sign up for free and join this conversation.
Sign Up
If you already have a RongvangIT account Login
Danh sách thư mục
Bắt đầu ngay với RồngVàngIT - nền tảng chia sẻ kiến thức lập trình tuyệt vời cho kỹ sư Việt Nam!

Hãy đăng nhập để sử dụng hàng loạt các chức năng tuyệt vời của RồngVàngIT !

  1. 1. Bạn sẽ nhận được các bài viết phù hợp bằng chức năng theo dõi tag và người dùng.
  2. 2. Bạn có thể đọc lại các thông tin hữu ích bằng chức năng lưu trữ nội dung.
  3. 3. Chia sẻ kiến thức, đặt câu hỏi và ghi lại quá trình trưởng thành của mình cùng RồngVàngIT !
Tạo tài khoản Đăng nhập
profile Pic