Laravel 怎么实现分模块,求大牛详解

实现如图所示的效果,model共用,然后controller 分组,分成各种不同的模块

file

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

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 Base\Controllers
    - 基础模块-模型命名空间 namespace Base\Models

#### 配置模块化服务
- 修改config/app.php

<?php

return [
//省略之前内容
'providers' => [

    //...
    // 模块化的Provider
    Base\Providers\BaseServiceProvider::class, //公共基本服务Provider
    Backend\Providers\BaseServiceProvider::class, //后台服务Provider
    Frontend\Providers\BaseServiceProvider::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/techlee/laravel5.5-modules-demo

> 原文链接 https://www.tech1024.cn/original/2937.html
6年前 评论
Summer

可以看下这个扩展包:https://github.com/caffeinated/modules/wik...

7年前 评论

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 Base\Controllers
    - 基础模块-模型命名空间 namespace Base\Models

#### 配置模块化服务
- 修改config/app.php

<?php

return [
//省略之前内容
'providers' => [

    //...
    // 模块化的Provider
    Base\Providers\BaseServiceProvider::class, //公共基本服务Provider
    Backend\Providers\BaseServiceProvider::class, //后台服务Provider
    Frontend\Providers\BaseServiceProvider::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/techlee/laravel5.5-modules-demo

> 原文链接 https://www.tech1024.cn/original/2937.html
6年前 评论

这样如果module很多,访问任何一个module都会去把所有module里的service provider都注册一遍吧。

4年前 评论

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