Laravel Spark 牛刀初试 —— 安装、设置及使用

我们在Laravel Spark Alpha 版本发布中提到了Spark发布的目的及其功能,本教程将深入了解如何使用这个新包。

Spark被设计的时候只考虑一件事情,那就是如何让SaaS应用中构建支付系统变得简单。如果你曾经构建过团队管理以及支付系统,那么你就会明白这个过程是多么耗时和痛苦。大量重复乏味的工作消耗在支持各种不同的系统、为此进行设计、创建发票单据,等等等等。使用Spark,你就可以将精力集中在处理真正所要关心的业务逻辑上。

言归正传,接下来让我们赶紧来看看如何安装使用Spark吧。

再次声明Spark目前还是Alpha版本,不建议用于实际生产环境,本文只是让大家了解其功能特性。

1、安装Spark

直接通过全局composer安装:

composer global require "laravel/spark-installer=~1.0"

接下来,创建一个新的Laravel应用或者进入一个已存在的应用根目录运行:

spark install

运行过程中会在命令行中问你一些问题:

laravel-spark-install

正如你所看到的,它会提示你安装/运行所有需要的依赖和组件并且为你运行所有这些命令。当然,你也可以手动运行这些命令:

php artisan migrate
npm install
gulp

在安装的最后,会提醒你在.env中设置Stripe令牌(token)和Authy键(key),Authy是一个用户保护登录的双重身份认证(2FA)系统,你可以注册获取免费API key。

现在基本安装已经完成,下面让我们来设置Spark。

2、SparkServiceProvider

SparkServiceProvider处理Spark的很多设置而且真的很强大,打开该文件让我们来看看每一个设置都用来做什么。

invoiceWith

当为客户生成电子邮件发票的时候使用invoiceWith

protected $invoiceWith = [
    'vendor' => 'Your Company',
    'product' => 'Your Product',
    'street' => 'PO Box 111',
    'location' => 'Your Town, 12345',
    'phone' => '555-555-5555',
];

这将是你首先要修改的设置之一从而成为一个相当漂亮的自我说明。

customizeSpark方法

默认情况下该方法用于注册团队模型:

Spark::configure([
    'models' => [
        'teams' => Team::class,
    ]
]);

你可以添加其他配置,修改团队模型,或者更多。

自定义注册和属性更新

customizeRegistrationcustomizeProfileUpdates方法被设计来为表单添加新的验证规则或者用于适应用户保存的方式,这允许你做任何自定义处理。

自定义角色

customizeRoles集成了Laravel 5.1.11的授权功能,你可以设置一个默认的角色:

Spark::defaultRole('member');

再加上你自己的角色:

Spark::roles([
    'admin' => 'Administrator',
    'member' => 'Member',
]);

3、自定义标签设置

customizeSettingsTabs允许你在设置表单中添加或移除新的链接。例如,用户设置看上去是这样的:

laravel-spark-settings
现在,如果你想要添加新的链接可以通过将新的标签放到当前列表下面实现:

Spark::settingsTabs()->configure(function ($tabs) {
    return [
        $tabs->profile(),
        $tabs->teams(),
        $tabs->security(),
        $tabs->subscription(),
        $tabs->make('My New Setting', 'test', 'fa-rocket'),
    ];
});

$tab->make的参数排序是标题、视图文件、图标。所有在我的例子中我将链接命名为”My New Setting”,创建了一个新的blade视图模板文件 resources/views/test.blade.php,然后使用来自FontAwesome的图标fa-rocket

laravel-spark-new-settings
你还可以在团队设置页面做同样的修改,格式完全和这里一样。

4、构建Spark订阅付款计划

定位到 customizeSubscriptionPlans方法并调整计划来匹配你的业务需求。在本例中,我创建了两个10天试用期的计划,也可以是每年购买:

Spark::plan('Basic', 'stripe-id')->price(10)
    ->features([
        'Feature 1',
    ]);
Spark::plan('Advanced', 'stripe-id')->price(40)
    ->trialDays(7)
    ->features([
        'Feature 1',
        'Feature 2',
    ]);

Spark::plan('Basic', 'stripe-id')->price(10)
    ->yearly()
    ->features([
        'Feature 1',
    ]);
Spark::plan('Advanced', 'stripe-id')->price(40)
    ->yearly()
    ->features([
        'Feature 1',
        'Feature 2',
    ]);

Spark还为这些计划提供了可视化显示。当我添加了一个年付款计划,UI的按钮就会改变为在年和月之间切换:

laravel-spark-payment-plan
在购买生效之前你还需要编辑strip-id为一个真实有效的。

5、优惠券折扣

订单系统如果不能为消费者提供优惠券和折扣将是不完整的,Spark提供了两种方式来启用该功能:

第一种是优惠券,在Stripe中创建一个新的优惠券然后将用户引导到这个注册页面:

register?coupon=10_percent

Spark在GET请求中看到这个优惠券将会自动通过Stripe API验证其有效性,如果有效则会将其应用到最终的折扣金额。

laravel-spark-discounts

站点基本上都使用这种方式进行折扣处理,唯一的不同之处在于你是在Spark服务提供者中进行定义,在boot()或者customizeSpark()方法中添加如下代码:

Spark::promotion('10_percent');

现在折扣会被应用到所有订单。

6、条款和条件

在应用根目录中创建一个新的命名为terms.md的文件,它将会自动被拉到/terms路由,通过Parsedown对其进行markdown解析。

7、最后

Spark固执己见但功能强大,下次你需要设置重复性计费我会向你推荐Spark,它会为你节省时间,提高效率。

本文翻译整理自:https://laravel-news.com/2015/09/laravel-spark/

学院君

学院君 has written 550 articles

资深PHP工程师,Laravel学院院长