如何通过模块/插件机制,灵活组织Laravel工程

如何通过模块/插件机制,灵活组织Laravel工程

有时候我们需要把 Laravel 工程拆分成不同的模块或功能管理,可以分配不同的工程师负责不同的模块,也方便在不同的工程之间相互使用。

有一个nwidart/laravel-modules就是做为modules来管理的,但有些问题:

  1. 生成的包里过于依赖 nwidart/laravel-modules,比如自动加载过程和 module_path 的函数依赖,造成生产环境也不能脱离,还有modules.json等一些啰嗦的多余文件。其实一点意义都没有,因为包通过 Laravel Service Provider 标准管理即可。

  2. 目录结构和laravel有些出入,比如Models,他起名叫 Entities。

  3. 比如用 make-command,生成的 Command 和 Laravel 脚手架的内容也不一样,内容还有些啰嗦。

这个包解决了上面的问题,而且还可以制作标准的 composer package。

在我们实际项目里一直作为模块的管理方式,也可以考虑做成动态的插件机制。

安装

composer require --dev zencodex/package-make

使用方法

// Modules/NewPackage
php artisan package:make NewPackage

目录结构:

Modules/NewPackage
├── Config
│   └── config.php
├── Console
│   └── UserCommand.php
├── Database
│   ├── Migrations
│   ├── Seeders
│   │   └── NewPackageDatabaseSeeder.php
│   └── factories
├── Http
│   ├── Controllers
│   │   └── NewPackageController.php
│   ├── Middleware
│   ├── Requests
│   └── Resources
│       └── UserResource.php
├── Models
│   └── User.php
├── Providers
│   ├── NewPackageServiceProvider.php
│   └── RouteServiceProvider.php
├── Resources
│   ├── assets
│   │   ├── js
│   │   │   └── app.js
│   │   └── sass
│   │       └── app.scss
│   ├── lang
│   └── views
│       ├── index.blade.php
│       └── layouts
│           └── master.blade.php
├── Routes
│   ├── api.php
│   └── web.php
├── Tests
│   ├── Feature
│   └── Unit
├── composer.json
├── package.json
└── webpack.mix.js

项目里使用方法

option 1:

// app/Providers/AppServiceProvider.php

use Modules\NewPackage\Providers\NewPackageServiceProvider;

class AppServiceProvider extends ServiceProvider

    public function register()
    {
        $this->app->register(NewPackageServiceProvider::class);
        ...
    }

or

Edit config/app.php, add Modules\NewPackage\Providers\NewPackageServiceProvider::class to providers.


    'providers' => [
        Illuminate\Validation\ValidationServiceProvider::class,
        Illuminate\View\ViewServiceProvider::class,
        Modules\NewPackage\Providers\NewPackageServiceProvider::class
        ...
    ],

option 2:

// 1. edit composer.json, add following
"repositories": [
    {
        "type": "path",
        "url": "Modules/*"
    }
]

// use private package or gitlab
"repositories": [
    {
        "type": "vcs",
        "url": "git@gitlab.example.com:/newpackage.git"
    }
]

// 2. composer require local path package (replace package/newpackage to yours)
composer require package/newpackage

其他可参考:

Github:package-make,喜欢就给个 star 哦

本作品采用《CC 协议》,转载必须注明作者和本文链接
不住念,无名无相
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 1
adays

要不要做一个通用后台+前台,插件机制,拆装方便,以普度众生 :blush:

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!