pingpong/modules

Laravel 模块

安装: 176,232

依赖: 17

建议者: 0

安全: 0

星标: 577

关注者: 48

分支: 151

开放问题: 70

v2.2.0 2016-01-11 07:46 UTC

README

pingpong/modules 是一个用于通过模块管理大型 Laravel 应用的 Laravel 扩展包。模块类似于 Laravel 扩展包,它包含一些视图、控制器或模型。此扩展包在 Laravel 4 和 Laravel 5 中都得到了支持和测试。

升级指南

至 2.0.18

如果您已升级到版本 2.0.18,请阅读此发行说明

至 2.0.10

之前,我们从该扩展包添加了两个服务提供者。在版本 2.0.5 中,我们只需要注册一个服务提供者。现在,我们可以从 providers 数组中移除 Pingpong\Modules\Providers\BootstrapServiceProvider,因为现在该服务提供者是由 Pingpong\Modules\ModulesServiceProvider 自动注册的。

从 Laravel 4 到 Laravel 5

如果您正在使用此扩展包,并且将 Laravel 应用从 Laravel 4 升级到 Laravel 5,您需要做一些事情。您将收到一些关于配置未加载的错误。要修复此问题,请按照以下说明操作。

  • 如果您发布了扩展包的配置文件,您需要将配置文件从 app/config/packages/pingpong/modules/config.php 移动到 app/config/modules.php
  • 如果您没有发布扩展包的配置文件,但想发布配置文件,只需运行 php artisan vendor:publish 命令即可。

从 1.1.* 到 1.2.0

新的配置文件。此破坏性更改影响了如果您从扩展包发布配置文件的情况。要修复此问题,在您的 app/config/packages/pingpong/modules/ 目录中创建一个名为 config.php 的新配置文件。接下来,将 paths.php 文件中的数组内容移动到新配置文件中的 paths 数组中。您的配置文件将类似于 这个

安装

通过 composer 安装

{
    "require": {
        "pingpong/modules": "~2.1"
    }
}

然后在您的 composer.json 文件中添加以下内容

然后运行 composer install 来获取包。

快速安装

composer require "pingpong/modules:~2.1"

您也可以使用以下命令简化上述代码

接下来,在 config/app.php 中添加以下服务提供者。

'providers' => array(
  'Pingpong\Modules\ModulesServiceProvider',
),

接下来,在同一个文件中的 aliases 数组中添加以下别名。

'aliases' => array(
  'Module' => 'Pingpong\Modules\Facades\Module',
),

接下来,通过运行以下命令发布扩展包的配置文件

php artisan vendor:publish

自动加载

默认情况下,控制器、实体或存储库不会自动加载。您可以使用 psr-4 来加载所有这些内容。例如

{
  "autoload": {
    "psr-4": {
      "App\\": "app/",
      "Modules\\": "modules/"
    }
  }
}

配置

  • modules - 用于保存生成的模块。
  • assets - 用于保存每个模块的模块资产。
  • migration - 用于保存如果您发布模块迁移的模块迁移。
  • generator - 用于生成模块文件夹。
  • scan - 用于允许扫描其他文件夹。
  • enabled - 如果为 true,则扩展包将扫描其他路径。默认值为 false
  • paths - 可以由扩展包自动扫描的路径列表。
  • composer
    • vendor - Composer 供应商名称。
    • author.name - Composer 作者名称。
    • author.email - Composer 作者电子邮件。
  • 缓存
    • enabled - 如果为 true,则扫描的模块(所有模块)将自动缓存。默认值为 false
    • key - 缓存名称。
    • lifetime - 缓存的生存期。

创建模块

要创建一个新的模块,您只需运行

php artisan module:make <module-name>
  • <module-name> - 必需。模块将被创建的名称。

创建新的模块

php artisan module:make Blog

创建多个模块

php artisan module:make Blog User Auth

默认情况下,如果您创建一个新模块,它将自动添加一些资源,如控制器、种子类或提供者。如果您不希望这些,您可以使用--plain标志来生成一个纯模块。

php artisan module:make Blog --plain
#OR
php artisan module:make Blog -p

命名约定

因为我们使用psr-4来自动加载模块,所以我们强烈建议使用StudlyCase约定。

文件夹结构

laravel-app/
app/
bootstrap/
vendor/
modules/
  ├── Blog/
      ├── Assets/
      ├── Config/
      ├── Console/
      ├── Database/
          ├── Migrations/
          ├── Seeders/
      ├── Entities/
      ├── Http/
          ├── Controllers/
          ├── Middleware/
          ├── Requests/
          ├── routes.php
      ├── Providers/
          ├── BlogServiceProvider.php
      ├── Resources/
          ├── lang/
          ├── views/
      ├── Repositories/
      ├── Tests/
      ├── composer.json
      ├── module.json
      ├── start.php

Artisan 命令

创建新模块。

php artisan module:make blog

使用指定的模块。请参阅#26

php artisan module:use blog

在命令行中显示所有模块。

php artisan module:list

为指定的模块创建新命令。

php artisan module:make-command CustomCommand blog

php artisan module:make-command CustomCommand --command=custom:command blog

php artisan module:make-command CustomCommand --namespace=Modules\Blog\Commands blog

为指定的模块创建新迁移。

php artisan module:make-migration create_users_table blog

php artisan module:make-migration create_users_table --fields="username:string, password:string" blog

php artisan module:make-migration add_email_to_users_table --fields="email:string:unique" blog

php artisan module:make-migration remove_email_from_users_table --fields="email:string:unique" blog

php artisan module:make-migration drop_users_table blog

回滚、重置和刷新模块迁移。

php artisan module:migrate-rollback

php artisan module:migrate-reset

php artisan module:migrate-refresh

回滚、重置和刷新指定模块的迁移。

php artisan module:migrate-rollback blog

php artisan module:migrate-reset blog

php artisan module:migrate-refresh blog

为指定的模块创建新的种子。

php artisan module:make-seed users blog

从指定的模块迁移。

php artisan module:migrate blog

从所有模块迁移。

php artisan module:migrate

从指定的模块种子。

php artisan module:seed blog

从所有模块种子。

php artisan module:seed

为指定的模块创建新的控制器。

php artisan module:make-controller SiteController blog

将指定模块的资产发布到公共目录。

php artisan module:publish blog

将所有模块的资产发布到公共目录。

php artisan module:publish

为指定的模块创建新的模型。

php artisan module:make-model User blog

php artisan module:make-model User blog --fillable="username,email,password"

为指定的模块创建新的服务提供者。

php artisan module:make-provider MyServiceProvider blog

发布指定模块或所有模块的迁移。当您想回滚迁移时,这非常有用。您也可以运行php artisan migrate而不是php artisan module:migrate命令来迁移迁移。

对于指定的模块。

php artisan module:publish-migration blog

对于所有模块。

php artisan module:publish-migration

启用指定的模块。

php artisan module:enable blog

禁用指定的模块。

php artisan module:disable blog

生成新的中间件类。

php artisan module:make-middleware Auth

更新指定模块的依赖项。

php artisan module:update ModuleName

更新所有模块的依赖项。

php artisan module:update

显示模块列表。

php artisan module:list

门面

获取所有模块。

Module::all();

获取所有缓存的模块。

Module::getCached()

获取有序模块。模块将按module.json文件中的priority键排序。

Module::getOrdered();

获取已扫描的模块。

Module::scan();

查找特定模块。

Module::find('name');
// OR
Module::get('name');

查找模块,如果存在,则返回Module实例,否则抛出Pingpong\Modules\Exeptions\ModuleNotFoundException

Module::findOrFail('module-name');

获取已扫描的路径。

Module::getScanPaths();

获取所有模块作为集合实例。

Module::toCollection();

按状态获取模块。1为活动状态,0为非活动状态。

Module::getByStatus(1);

检查指定的模块。如果存在,则返回true,否则返回false

Module::has('blog');

获取所有启用的模块。

Module::enabled();

获取所有禁用的模块。

Module::disabled();

获取所有模块的数量。

Module::count();

获取模块路径。

Module::getPath();

注册模块。

Module::register();

启动所有可用的模块。

Module::boot();

获取所有启用的模块作为集合实例。

Module::collections();

从指定的模块获取模块路径。

Module::getModulePath('name');

从指定的模块获取资产路径。

Module::getAssetPath('name');

从此包获取配置值。

Module::config('composer.vendor');

获取使用的存储路径。

Module::getUsedStoragePath();

获取cli会话中使用的模块。

Module::getUsedNow();
// OR
Module::getUsed();

设置cli会话中使用的模块。

Module::setUsed('name');

获取模块的资产路径。

Module::getAssetsPath();

从特定模块获取资产URL。

Module::asset('blog:img/logo.img');

通过给定的模块名称安装指定的模块。

Module::install('pingpong-modules/hello');

更新指定模块的依赖项。

Module::update('hello');

模块实体

从特定模块获取实体。

$module = Module::find('blog');

获取模块名称。

$module->getName();

获取小写模块名称。

$module->getLowerName();

获取StudlyCase格式的模块名称。

$module->getStudlyName();

获取模块路径。

$module->getPath();

获取额外路径。

$module->getExtraPath('Assets');

禁用指定的模块。

$module->enable();

启用指定的模块。

$module->disable();

删除指定的模块。

$module->delete();

自定义命名空间

当您创建一个新模块时,它还会为LangViewConfig注册新的自定义命名空间。例如,如果您创建一个名为blog的新模块,它将为该模块注册新的命名空间/提示blog。然后,您可以使用该命名空间来调用LangViewConfig。以下是一些用法示例

调用Lang

Lang::get('blog::group.name');

调用视图

View::make('blog::index')

View::make('blog::partials.sidebar')

调用配置

Config::get('blog.name')

发布模块

你创建过laravel模块吗?是的,我创建过了。那么,我想发布我的模块。在哪里发布呢?这就是问题。答案是什么?答案是Packagist。在pingpong/modules版本>=1.2.0中,当你生成一个模块时,你会看到一个新文件被生成,名为composer.json

自动扫描供应商目录

默认情况下,vendor目录不会被自动扫描,你需要更新配置文件以允许这样做。将scan.enabled的值设置为true。例如

// file config/modules.php

return [
  //...
  'scan' => [
    'enabled' => true
  ]
  //...
]

你可以使用module:list命令来验证模块是否已安装

php artisan module:list

发布模块

在创建模块并确信你的模块将被其他开发者使用后,你可以将你的模块推送到githubbitbucket,然后你可以将你的模块提交到packagist网站。

你可以按照以下步骤发布你的模块。

  1. 创建模块。
  2. 将模块推送到github。
  3. 将你的模块提交到packagist网站。提交到packagist非常简单,只需提供你的github仓库,点击提交,你就完成了。