基於Laravel5.5的模組化開發

TechLee發表於2019-02-16

laravel 安裝後是單模組應用,但通常情況下,我們的專案往往會有很多模組,如果按單模組去做,檔案目錄會異常龐大,不利於維護,耦合性太大。
那麼下面就詳細說一下利用最新laravel5.5如何進行分模組開發。

下載安裝Laravel5.5

composer安裝laravel5.5

composer create-project --prefer-dist laravel/laravel ./

建立 模組化 目錄

  • 新建modules模組目錄
app
artisan
bootstrap
composer.json
composer.lock
config
database
modules
package.json
phpunit.xml
public
readme.md
resources
routes
server.php
storage
tests
vendor
webpack.mix.js
  • modules的目錄結構為

    • Base 公共基礎模組
    • Backend 後臺模組
    • Frontend 前臺模組
modules/
├── Backend
│   ├── Controllers
│   ├── helpers.php
│   ├── Middlewares
│   ├── Models
│   ├── Providers
│   │   ├── BaseServiceProvider.php
│   │   └── RouteServiceProvider.php
│   └── Requests
│   └── helpers.php
├── Base
│   ├── Controllers
│   ├── helpers.php
│   ├── Middlewares
│   ├── Models
│   ├── Providers
│   │   ├── BaseServiceProvider.php
│   │   └── RouteServiceProvider.php
│   └── Requests
└── Frontend
    ├── Controllers
    ├── helpers.php
    ├── Middlewares
    ├── Models
    ├── Providers
    │   ├── BaseServiceProvider.php
    │   └── RouteServiceProvider.php
    └── Requests

使用composer自動載入模組名稱空間

  • 修改composer.json 檔案
{
    "name": "laravel/laravel",
    ...
    "autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],

        "psr-4": {            
            "App\": "app/",
            "Base\": "modules/Base/",
            "Backend\": "modules/Backend/",
            "Frontend\": "modules/Frontend/"
        },
        "files": [
            "modules/Base/helpers.php"
        ] 
    }
    ...
}
  • 自動載入命令,在應用根目錄命令列執行
composer dumpauto
  • 名稱空間舉例

    • 基礎模組名稱空間為 namespace Base
    • 基礎模組-控制器名稱空間 namespace BaseControllers
    • 基礎模組-模型名稱空間 namespace BaseModels

配置模組化服務

  • 修改config/app.php
<?php

return [
    //省略之前內容
    `providers` => [
    
        //...
        // 模組化的Provider
        BaseProvidersBaseServiceProvider::class, //公共基本服務Provider
        BackendProvidersBaseServiceProvider::class, //後臺服務Provider
        FrontendProvidersBaseServiceProvider::class, //前臺基本服務Provider
    ],
    //省略之後內容
];

新建各模組路由檔案

- base.php
- backend.php
- frontend.php
routes/
├── api.php
├── backend.php
├── base.php
├── channels.php
├── console.php
├── frontend.php
└── web.php

原始碼託管於碼雲 http://git.oschina.net/techle…

原文連結 http://www.tech1024.cn/origin…

相關文章