grafite/builder

此包已被弃用且不再维护。作者建议使用 https://github.com/grafiteinc/scaffold 包。

通过各种命令、服务、外观和模板,以惊人的速度准备您的 Laravel 应用。


README

Grafite 已归档此项目,不再支持或开发代码。我们建议将其仅作为您自己的代码灵感的来源。

Builder - 用于快速 Laravel 开发的工具集

Build Status Packagist license

这是一套工具,可帮助您加速 Laravel 应用的开发。您可以使用预先编写的各种部分(用户、用户元数据、角色、团队)开始一个应用。它还包含一个强大的 FormMaker,可以从表格和对象生成表单内容。它可以通过您准备好的完整测试脚本快速生成史诗级的 CRUD 原型,需要很少的编辑。它还提供了一个优雅的 URL 友好型加密工具。最后,它还带来了 LaravelCollective 作为供应商的一些朋友。

作者

一般要求

  1. PHP 7.1.3+
  2. OpenSSL

兼容性和支持

Laravel 版本 包标签 支持
5.7.x 2.5.x 不支持
5.6.x 2.4.x 不支持
5.5.x 2.3.x 不支持
5.4.x 2.2.x 不支持
5.3.x 2.0.x - 2.1.x 不支持
5.1.x - 5.2.x 1.9.x 不支持

安装

开始一个新的 Laravel 项目

laravel new {project_name}

composer create-project laravel/laravel {project_name}

然后运行以下命令添加 Grafite Builder

composer require "grafite/builder"

是时候发布那些资产了!Grafite Builder 使用 CrudMaker 和 FormMaker,它们都有可发布的资产。

php artisan vendor:publish

php artisan vendor:publish --provider="Yab\CrudMaker\CrudMakerProvider"
php artisan vendor:publish --provider="Yab\FormMaker\FormMakerProvider"

现在您已安装 Grafite Builder。尝试使用 入门套件

应用入门套件

!!! 注意 "确保您已遵循入门说明!"

Grafite Builder 提供了一种优雅的解决方案,通过为您的应用构建最基本的前端视图、控制器、模型和迁移来开始应用。现在您可以使用单个命令轻松开始整个应用,无需使用 php artisan make:auth

php artisan grafite:starter

!!! 提示 "但在我们这样做之前,让我们先设置一些事情。"

为了使用入门套件,您需要修改一些文件。请查看以下修改

将以下内容添加到您的 app/Http/Kernel.php 中的 $routeMiddleware 数组。

'admin' => \App\Http\Middleware\Admin::class,
'permissions' => \App\Http\Middleware\Permissions::class,
'roles' => \App\Http\Middleware\Roles::class,
'active' => \App\Http\Middleware\Active::class,

如果您不想担心电子邮件激活,请从路由的中间件数组中删除此内容

'active'

将 'config/auth.php' 和 'database/factories/UserFactory.php' 中的 App\User::class 更改为以下内容

App\Models\User::class

将以下内容添加到 'app/Providers/AuthServiceProvider.php' 的 boot 方法中

Gate::define('admin', function ($user) {
    return ($user->roles->first()->name === 'admin');
});

Gate::define('team-member', function ($user, $team) {
    return ($user->teams->find($team->id));
});

将以下内容添加到 'app/Providers/EventServiceProvider.php' 的 $listen 属性中

'App\Events\UserRegisteredEmail' => [
    'App\Listeners\UserRegisteredEmailListener',
],

您需要在 config/database.php 中创建一个 sqlite 内存测试数据库。

'testing' => [
    'driver'   => 'sqlite',
    'database' => ':memory:',
    'prefix'   => '',
],

将以下行添加到 'phpunit.xml' 文件中

<env name="DB_CONNECTION" value="testing"/>
<env name="MAIL_DRIVER" value="log"/>

关于电子邮件激活

入门套件已添加电子邮件激活组件到应用中,以确保您的用户已验证了他们的电子邮件地址。您可以通过从 web 路由中移除 active 中间件来禁用它。您还必须禁用通知,但如果您删除电子邮件激活,则不会引起任何问题。

对于 Laravel 5.2 及更高版本

您还需要设置密码提醒的电子邮件位置。(在 config/auth.php 的底部)

'passwords' => [
    'users' => [
        'provider' => 'users',
        'email' => 'emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],
],

注意事项

您可以通过测试注册来快速开始,但请确保您的应用已配置电子邮件,否则将抛出异常。您可以通过在 .env 文件中将它临时设置为 'log' 来轻松完成此操作。

MAIL_DRIVER=log

最后步骤

一旦添加了所有这些部分,您将想要运行入门命令!

php artisan grafite:starter

然后您必须刷新需要包含在项目中的所有类的列表。

composer dump-autoload

然后您需要迁移以添加用户、用户元、角色和团队表。种子运行以设置应用程序的初始角色。

php artisan migrate --seed

一旦入门套件运行起来,您就可以注册并登录到您的应用。然后您可以去应用的设置部分,将您的角色设置为管理员以完全控制应用。

入门套件发布的内容

控制器

Grafite Builder 更新了基本控制器以处理用户注册时创建个人资料等问题,以及将默认返回路由设置为 dashboard 等。它还提供了用于处理个人资料修改、页面、团队管理等操作的控制器。管理员控制器处理用户的行政工作,如果用户具有管理员角色,则可以修改用户。

  • app/Http/Controllers/
    • Admin/
      • DashboardController.php
      • UserController.php
      • RoleController.php
    • Auth/
      • ActivateController.php
      • ForgotPasswordController.php
      • LoginController.php
      • RegisterController.php
      • ResetPasswordController.php
    • User/
      • PasswordController.php
      • SettingsController.php
    • PagesController.php
    • TeamController.php

中间件

Grafite Builder 由于重定向的改变而覆盖了默认中间件。它还提供了用于角色相关路由级保护的 Admin 中间件。

  • app/Http/Middleware/
    • Active.php
    • Admin.php
    • Permissions.php
    • RedirectIfAuthenticated.php
    • Roles.php

请求

提供了处理团队创建和更新所有组件的请求。在这里,我们整合了所需的规则,可以运行验证并返回错误。(如果您使用 Grafite Builder FormMaker Facade,则甚至可以处理接受错误并突出显示适当的字段。)

  • app/Http/Requests/
    • PasswordUpdateRequest.php
    • RoleCreateRequest.php
    • TeamCreateRequest.php
    • TeamUpdateRequest.php
    • UserInviteRequest.php
    • UserUpdateRequest.php

路由

由于添加了处理团队、个人资料、密码等的多条路由,因此所有路由都由入门套件覆盖。

  • routes/web.php

配置

权限配置文件已发布,这是您设置角色可以具有的访问级别和类型权限的一种方式。

  • config/permissions.php

事件

各种操作的事件。

  • app/Events/
    • UserRegisteredEmail.php

监听器

各种操作的监听器。

  • app/Listeners/
    • UserRegisteredEmailListener.php

模型

模型是显而易见的,但当我们整合以下服务时,这些服务处理所有业务逻辑等,并调用模型实现SOLID实践,控制器、控制台或其他服务,它们只通过它调用服务。一旦整合完成,请确保您删除了User.php模型文件,并确保您已遵循安装和配置说明。

  • app/Models/
    • UserMeta.php
    • User.php
    • Team.php
    • Role.php

通知

这些都是我们需要发送给应用中用户的电子邮件。它们很棒,因为它们使用了Laravel通知组件的力量。

  • app/Notficiations/
    • ActivateUserEmail.php
    • NewAccountEmail.php
    • ResetPasswordEmail.php

服务

服务结构允许我们将业务逻辑放在模型和控制器之外。这种方法最适合那些可能希望在将来集成API或其他事物的应用。它还允许应用程序具有高度可测试的结构。

  • app/Services/
    • Traits/
      • HasRoles.php
      • HasTeams.php
    • ActivateService.php
    • RoleService.php
    • TeamService.php
    • UserService.php

数据库

请确保在安装后运行所有迁移和种子。这些种子设置了您应用程序中可用的默认角色。

  • database/factories/
    • RoleFactory.php
    • TeamFactory.php
    • UserFactory.php
    • UserMetaFactory.php
  • database/migrations/
    • 2015_11_30_191713_create_user_meta_table.php
    • 2015_11_30_215038_create_roles_table.php
    • 2015_11_30_215040_create_role_user_table.php
    • 2015_12_04_155900_create_teams_table.php
    • 2015_12_04_155900_create_teams_users_table.php
  • database/seeds/
    • DatabaseSeeder.php
    • RolesTableSeeder.php
    • UserTableSeeder.php

视图

视图尽可能少地包含HTML以执行逻辑操作。这些是旨在最基本,并且所有这些都可以修改。

  • resources/views/
    • admin/
      • roles/
        • edit.blade.php
        • index.blade.php
        • invite.blade.php
      • users/
        • edit.blade.php
        • index.blade.php
        • invite.blade.php
      • dashboard.blade.php
    • auth/
      • activate/
        • email.blade.php
        • token.blade.php
      • passwords/
        • email.blade.php
        • reset.blade.php
      • login.blade.php
      • register.blade.php
    • errors/
      • 401.blade.php
      • 404.blade.php
      • 503.blade.php
    • partials/
      • errors.blade.php
      • message.blade.php
      • status.blade.php
    • team/
      • create.blade.php
      • edit.blade.php
      • index.blade.php
      • show.blade.php
    • user/
      • meta.blade.php
      • password.blade.php
      • settings.blade.php
    • dashboard.blade.php

测试

Grafite Builder启动套件为其每个部分提供了基本的单元测试。这为快速构建应用程序的测试提供了很好的示例。

  • tests/
    • Feature/
      • TeamIntegrationTest.php
    • Unit/
      • UserServiceTest.php
      • TeamServiceTest.php
      • RoleServiceTest.php

设置后

仪表板访问

通过浏览到 /dashboard 端点找到应用程序仪表板。默认管理员用户登录凭证为

用户

用户模型通过 Grafite Builder Starter Kit 扩展。它增加了基本用户模型:角色、团队和用户元数据。关系如下

  • 元数据:hasOne
  • 角色:belongsToMany
  • 团队:belongsToMany

它还提供了以下方法

meta() // The relationship method
roles() // The relationship method
hasRole(role_name) // checks if user has role
teams() // The relationship method
isTeamMember(team_id) // checks if user is member
isTeamAdmin(team_id) // checks if user is admin level member

中间件

管理员

Admin 中间件充当在路由或控制器级别设置管理员级别权限的工具。

['middleware' => 'admin']

在路由中添加此简单设置将确保用户可以访问管理员级别,否则它将返回他们来自的地方。

激活

Active 中间件检查账户是否通过使用通过电子邮件发送的令牌访问激活 URL 而被激活。

['middleware' => 'active']

在路由中添加此简单设置将确保用户拥有已激活的账户,否则它将重定向他们到 /active 页面,以便他们可以在必要时请求另一个激活令牌。

角色

Roles 中间件允许您为您的路由设置自定义角色。

['middleware' => 'roles:admin|member']

权限

Permissions 中间件允许您为您的路由设置自定义权限(角色的子集)

['middleware' => 'permissions:admin|somethingDescriptive']

您可以在 config/permissions.php 中设置权限

Bootstrap UI

!!! 提示 "Bootstrap 版本 4"

如果您想选择应用程序入门套件,您还有出色的视图启动选项。您可以通过快速构建应用程序并立即运行!

php artisan grafite:bootstrap

!!! 提示 "这还将确保您的 webpack 文件已准备好运行"

Bootstrap 发布的内容

该命令将覆盖任何现有文件及其 Bootstrap 版本

  • resources/views/
    • user/
      • meta.blade.php
      • password.blade.php
      • settings.blade.php
    • admin/
      • users/
        • edit.blade.php
        • index.blade.php
        • invite.blade.php
    • auth/
      • login.blade.php
      • password.blade.php
      • register.blade.php
      • reset.blade.php
    • dashboard/
      • main.blade.php
      • panel.blade.php
    • emails/
      • new-user.blade.php
      • password.blade.php
    • errors/
      • 404.blade.php
      • 503.blade.php
    • partials/
      • errors.blade.php
      • message.blade.php
    • team/
      • create.blade.php
      • edit.blade.php
      • index.blade.php
      • show.blade.php

应用程序活动

有时知道用户在浏览您的网站或应用程序时在做什么是非常有用的。活动套件为您提供了跟踪用户及其所有行为的所需一切。中间件为您做了大部分工作,但您也可以根据需要对其进行自定义。

设置

php artisan grafite:activity

将以下内容添加到您的 config/app.php

App\Providers\ActivityServiceProvider::class,
外观

提供以下工具用于应用程序功能

Activity::log($description);
Activity::getByUser($userId);
助手
activity($description) // will log the activity

应用程序功能

有时候我们需要的只是一个简单的开关,来控制应用中的某些部分开启或关闭,或者,也许客户有这样的需求。无论如何,使用功能管理套件可以处理所有这些。现在您或您的客户可以开启或关闭注册功能,或应用中的任何其他功能。只需利用Blade或辅助组件,就能完全控制您的应用。

设置

php artisan grafite:features

您可能希望将此行添加到您的导航中

<li class="nav-item"><a class="nav-link" href="{!! url('admin/features') !!}"><span class="fa fa-cog"></span> Features</a></li>

将以下内容添加到您的 config/app.php

App\Providers\FeatureServiceProvider::class,

app/Providers/RouteServiceProvider.phpmapWebRoutes(Router $router) 函数中添加此行

require base_path('routes/features.php');
外观

提供以下工具用于应用程序功能

Features::isActive($key);
Blade
@feature($key)
// code goes here
@endfeature
辅助器
feature($key) // will return true|false
发布的功能

该命令将覆盖任何现有文件的功能版本

  • app/Facades/Features.php
  • app/Http/Controllers/Admin/FeatureController.php
  • app/Http/Requests/FeatureCreateRequest.php
  • app/Http/Requests/FeatureUpdateRequest.php
  • app/Models/Feature.php
  • app/Providers/FeatureServiceProvider.php
  • app/Services/FeatureService.php
  • database/migrations/2016_04_14_210036_create_features_table.php
  • resources/views/admin/features/create.blade.php
  • resources/views/admin/features/edit.blade.php
  • resources/views/admin/features/index.blade.php
  • routes/features.php
  • tests/Feature/FeatureIntegrationTest.php
  • tests/Unit/FeatureServiceTest.php

应用日志

日志工具简单地将应用日志视图添加到您的管理面板中。这在开发过程中或保持应用正常运行时可能有所帮助。

设置

php artisan grafite:logs

您可能希望将此行添加到您的导航中

<li class="nav-item"><a href="{!! url('admin/logs') !!}"><span class="fa fa-line-chart"></span> Logs</a></li>

app/Providers/RouteServiceProvider.phpmapWebRoutes(Router $router) 函数中添加此行

require base_path('routes/logs.php');

应用通知

Grafite Builder的通知将为您构建基本的控制器、服务、视图,以及针对用户和管理员的视图,这样您可以轻松地批量或专门通知您的用户。

设置
php artisan grafite:notifications

您可能希望将此行添加到您的导航中

<li><a href="{!! url('user/notifications') !!}"><span class="fa fa-envelope-o"></span> Notifications</a></li>
<li><a href="{!! url('admin/notifications') !!}"><span class="fa fa-envelope-o"></span> Notifications</a></li>

app/Providers/RouteServiceProvider.phpmapWebRoutes(Router $router) 函数中添加此行

require base_path('routes/notification.php');
外观

为应用内通知提供以下工具

Notifications::notify($userId, $flag, $title, $details);

标志可以是任何Bootstrap警报:默认、信息、成功、警告、危险

发布的通知

该命令将覆盖任何现有文件的通知版本

  • app/Facades/Notifications.php
  • app/Http/Controllers/Admin/NotificationController.php
  • app/Http/Controllers/User/NotificationController.php
  • app/Http/Requests/NotificationRequest.php
  • app/Models/Notification.php
  • app/Services/NotificationService.php
  • database/migrations/2016_04_14_180036_create_notifications_table.php
  • resources/views/admin/notifications/create.blade.php
  • resources/views/admin/notifications/edit.blade.php
  • resources/views/admin/notifications/index.blade.php
  • resources/views/notifications/index.blade.php
  • resources/views/notifications/show.blade.php
  • routes/notification.php
  • tests/NotificationIntegrationTest.php
  • tests/NotificationServiceTest.php

Forge集成

FORGE组件为您在管理面板中提供对FORGE API的访问。您不必为每次调整都登录到FORGE,现在您只需登录自己的应用程序,在管理面板中调整服务器配置中的调度器或工作者即可。

要求
composer require themsaid/forge-sdk
设置
php artisan grafite:forge

您可能希望将此行添加到您的导航中

<li class="nav-item"><a href="{{ url('admin/forge/settings') }}"><span class="fa fa-fw fa-server"></span> Forge Settings</a></li>
<li class="nav-item"><a href="{{ url('admin/forge/scheduler') }}"><span class="fa fa-fw fa-calendar"></span> Forge Calendar</a></li>
<li class="nav-item"><a href="{{ url('admin/forge/workers') }}"><span class="fa fa-fw fa-cogs"></span> Forge Workers</a></li>

app/Providers/RouteServiceProvider.phpmapWebRoutes(Router $router) 函数中添加此行

您将看到类似这样的行:->group(base_path('routes/web.php'));

您需要将其更改为类似这样

->group(function () {
    require base_path('routes/web.php');
    require base_path('routes/forge.php');
}

将这些添加到 .env 文件中

FORGE_TOKEN=
FORGE_SERVER_ID=
FORGE_SITE_ID=

应用程序 API

如果您想选择使用 Laracogs 入门套件,您也可以轻松构建 API 层。运行 grafite:api 命令将设置基本组件,但您也可以通过使用 --api 选项将 API 工具作为 CRUD 的一个部分来使用。

需要
composer require tymon/jwt-auth
设置
php artisan grafite:api

本质上,您想要为 JWT 执行所有基本设置,例如这里面的所有内容:然后按照在:https://github.com/tymondesigns/jwt-auth/wiki/Installation 上的安装说明进行操作。

将此添加到 app/Providers/RouteServiceProvider.php 文件中的 mapWebRoutes(Router $router) 函数

require base_path('routes/api.php');

在 app/Http/Kernal.php 下的 routeMiddleware 中添加

'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class,

将 app/Http/Middleware/VerifyCsrfToken.php 添加到 except 属性(您还必须为添加的 CRUD 执行此操作)

'api/v1/login',
'api/v1/user/profile',

如果您使用 Apache,请将此添加到 .htaccess 文件

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

还要更新您的 jwt 配置文件,并将用户设置为

\App\Models\User::class
API 发布的内容

该命令将覆盖任何现有文件及其 API 版本

  • app/Http/Controllers/Api/AuthController.php
  • app/Http/Controllers/Api/UserController.php
  • routes/api.php

应用程序队列

如果您已配置 redis 实例并通过该实例运行队列,那么 Horizon 是非常出色的,但并非所有应用程序都需要这样,也不必从那里开始。如果您有一个数据库驱动的队列,并正在寻找一个易于管理的组件来处理作业重试和取消,那么这将非常适合您的应用程序。

设置
php artisan grafite:queue

app/Providers/RouteServiceProvider.phpmapWebRoutes(Router $router) 函数中添加此行

require base_path('routes/queue.php');

您可能希望将此行添加到您的导航中

<li><a href="{!! url('admin/queue') !!}"><span class="fa fa-list"></span> Queue</a></li>

社交媒体登录

如果您想在您的应用程序中提供社交媒体登录,并且想要一种简单的方法来开始,那么就无需再寻找了。只需运行命令并按照下面的步骤进行操作,您就会得到 GitHub 登录。在查看代码库之后,集成 Facebook 等其他服务也很容易。

需要
composer require laravel/socialite
设置
php artisan grafite:socialite

下一步是使用 socialite 准备您的应用程序

将此添加到您的 app 配置下的 providers

Laravel\Socialite\SocialiteServiceProvider::class

将此添加到您的 app 配置下的 aliases

'Socialite' => Laravel\Socialite\Facades\Socialite::class,

require base_path('routes/socialite.php'); 添加到 app/Providers/RouteServiceProvider.php 中的 mapWebRoutes(Router $router) 函数

Route::middleware('web')
    ->namespace($this->namespace)
    ->group(function () {
        require base_path('routes/socialite.php');
        require base_path('routes/web.php');
    });

最后,在 services 配置中设置访问详情

'github' => [
    'client_id' => 'id code',
    'client_secret' => 'secret code',
    'redirect' => 'http://your-domain/auth/github/callback',
    'scopes' => ['user:email'],
],
socialite 发布的内容

该命令将覆盖任何现有文件及其 socialite 版本

  • app/Http/Controllers/Auth/SocialiteAuthController.php
  • routes/socialite.php

应用程序计费

如果您想选择Grafite Builder入门套件。您还可以使用Grafite Builder计费命令和Laravel/Cashier快速处理您的应用程序的计费。Grafite Builder的计费将构建基本控制器、视图等,这样您就可以专注于让您的应用程序变得精彩!

要求
composer require laravel/cashier
设置
php artisan grafite:billing

您必须修改app/Providers/RouteServiceProvider.php文件中的mapWebRoutes(Router $router)函数

您将看到类似这样的行:->group(base_path('routes/web.php'));

您需要将其更改为类似这样

->group(function () {
    require base_path('routes/web.php');
    require base_path('routes/billing.php');
}

将这些添加到 .env 文件中

SUBSCRIPTION=app_basic
STRIPE_SECRET=secret-key
STRIPE_PUBLIC=public-key

将以下内容添加到app/Providers/AuthServiceProvider.php

Gate::define('access-billing', function ($user) {
    return ($user->meta->subscribed('main') && is_null($user->meta->subscription('main')->endDate));
});

对于config/services.php,您希望它看起来像这样

'stripe' => [
    'model'  => App\Models\UserMeta::class,
    'key'    => env('STRIPE_PUBLIC'),
    'secret' => env('STRIPE_SECRET'),
],

最后运行迁移以添加订阅并将它们绑定到用户元数据

php artisan migrate

您还需要更新webpack mix文件,使其看起来像这样(webpack.mix.js)

.js([
    'resources/assets/js/app.js',
    'resources/assets/js/card.js',
    'resources/assets/js/subscription.js'
], 'public/js');
设置后

您可能希望将此行添加到您的导航中

<li><a href="{{ url('user/billing/details') }}"><span class="fa fa-dollar"></span> Billing</a></li>
注意

您可能需要将视图中的以下行切换为

<strong>To:</strong> {{ $user->user()->email }}

我们这样做是因为我们不是将计费绑定到用户,而是将其绑定到用户元数据。

计费发布的内容

该命令将覆盖任何现有的文件,使用计费版本的文件

  • app/Http/Controllers/User/BillingController.php
  • app/Models/UserMeta.php
  • config/invoice.php
  • config/plans.php
  • database/migrations/2016_02_26_000647_create_subscriptions_table.php
  • database/migrations/2016_02_26_000658_add_billings_to_user_meta.php
  • resources/assets/js/card.js
  • resources/assets/js/subscription.js
  • resources/views/billing/card-form.blade.php
  • resources/views/billing/change-card.blade.php
  • resources/views/billing/details.blade.php
  • resources/views/billing/invoices.blade.php
  • resources/views/billing/coupons.blade.php
  • resources/views/billing/subscribe.blade.php
  • resources/views/billing/tabs.blade.php
  • routes/billing.php
账户

账户服务是处理您的订阅详情的工具,这意味着您可以使用计划配置来限制应用程序,根据各种条款。您可以根据计费周期或通常情况下限制这些计划详情。

这些仅与计费相关。它们为根据用户订阅的计划处理应用程序中的限制提供了额外的工具。除非您使用Laracogs提供的UserMeta结构实现Cashier计费系统,否则这不会对您有益。

配置

这是config/plans.php的基本配置。这是针对单个计划的,无论是已订阅还是未订阅。

!!! tip "记住您需要在Stripe上具有相应的计划,例如默认的app_basic"

'subscription' => env('SUBSCRIPTION'),
'subscription_name' => 'main',
'plans' => [
    'app_basic' => [
        'access' => [
            'some name'
        ],
        'limits' => [
            'Model\Namespace' => 5,
            'pivot_table' => 1
        ],
        'credits' => [
            'column' => 'credits_spent',
            'limit' => 10
        ],
        'custom' => [
            'anything' => 'anything'
        ],
    ],
]
多个计划

在这个配置中,您可以定义多个计划,每个计划可以有不同的规则。默认情况下,套件使用单个计划。您可以在env中定义此内容,如上所述。但如果你想实现多个计划,你可以更改以下代码

  1. BillingController.php的第45行,将config('plans.subscription')更改为:$payload['plan']
  2. namestripe_id添加到配置中
'subscription_name' => 'main',
'plans' => [
    'basic' => [
        'name' => 'Basic Subscription',
        'stripe_id' => 'basic_subscription',
        'access' => [
            'some name'
        ],
        'limits' => [
            'Model\Namespace' => 5,
            'pivot_table' => 1
        ],
        'credits' => [
            'column' => 'credits_spent',
            'limit' => 10
        ],
        'custom' => [
            'anything' => 'anything'
        ],
    ],
]
  1. 然后,在resources/views/billing/subscribe.blade.php中卡表单包含上方添加以下代码
<div class="form-group">
    <label class="form-label" for="plan">Plan</label>
    <select class="form-control" name="plan" id="plan">
        @foreach (config('plans.plans') as $plan)
            <option value="{{ $plan['stripe_id'] }}">{{ $plan['name'] }}</option>
        @endforeach
    </select>
</div>

!!! 提示 "您可能还希望添加一个组件到您的应用程序中,以允许用户切换计划。您可以使用swap方法来实现:auth()->user()->meta->subscription(config('plans.subscription_name'))->swap($request->plan)"

服务方法

#### currentBillingCycle() 在方法开始时使用此方法,并在其后链接着另一个方法,您可以将查询限制为当前计费周期。
#### canAccess($area) 如果用户可以进入,则返回布尔值
#### cannotAccess($area) 如果用户不能进入,则返回布尔值
#### getClause($key) 返回计划的指定条款
#### getLimit($model) 返回模型或连接表的指定限制
#### withinLimit($model, $key = 'user_id', $value = {user's id}) 确认指定的模型仅通过$key和$value收集了指定数量的数据。* 如果在之前添加了`currentBillingCycle()`,则会增加进一步的限制。
#### creditsUsed($model, $key = 'user_id', $value = {user's id}) 通过$key和$value报告收集的指定数量。* 如果在之前添加了`currentBillingCycle()`,则会增加进一步的限制。
#### creditsAvailable($model) 根据配置和前一个方法返回剩余的信用额度数量。* 如果在之前添加了`currentBillingCycle()`,则会增加进一步的限制。
#### clause($key, $method, $model = null) 执行由配置中条款名称定义的规则的自定义方法。此闭包方法提供以下参数:$user, $subscription, $clause, $query

许可

Grafite Builder是开源软件,许可协议为MIT许可

错误报告和功能请求

请尽可能详细地提供有关提交问题和功能请求的详细信息

免责声明

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他方式产生,无论是在软件或其使用或其他交易中。