スパークチームのララベルノヴァ資源突出部


Gambit Nashで我々はWP Git Updaterをリリースする寸前です.WPのgitアップデーターはgitに格納されているWordPressのウェブサイトのための自動化されたソースコントロールの更新を提供します.dependabotのように、しかし、作曲家バージョン管理を使用していないWordPressサイトのように.
これは、毎月のサブスクリプションを持ってサービスです.明らかな選択は、Laravel Sparkを実装し、それがサブスクリプション管理の世話をすることでした.追加ボーナスとしては、サイト(レイアウト、スタイルなど)の残りの部分から動作するようにベースを提供しました.
私はより広いポストで火花をチェックしようとしているので、私はあまりに遠いレビューに行かないつもりです、しかし、キオスク機能が「OK」であると言うのに十分であるが、それはLaravel Nova(そして、それはそうでなければなりません)のレベルでありません.それで、我々は決定もサイトのためにノヴァバックエンドを構築することにしました.
NOVAでスパーク情報を表示するための希少な例やパッケージを見つけることにとても驚きました.Novaがインストールされるとき、この情報を示すために含まれる若干のスタブを持っている火花の価値があるかもしれません.
我々は、チームの請求のプロファイルを介してスパークを使用しているので、次のスタブは、アカウントのユーザーサブスクリプションにはかかりませんが、私はあなたが必要に応じてユーザーのために働くためにリソースを変更することができることを確認してください.
チームリソース
<?php
namespace App\Nova;

use Illuminate\Support\Str;
use Laravel\Nova\Fields\BelongsToMany;
use Laravel\Nova\Fields\DateTime;
use Laravel\Nova\Fields\HasMany;
use Laravel\Nova\Fields\ID;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Text;
use Laravel\Spark\Spark;

class Team extends Resource
{
    public static $model = \App\Models\Team::class;

    public static $group = 'Spark';

    public static $search = [
        'id',
        'name',
        'update_token'
    ];

    public static $title = 'name';

    public function fields(Request $request)
    {
        return [
            ID::make('ID', 'id')->sortable(),
            Text::make('Name', 'name')->sortable()->rules('required', 'max:255'),
            Text::make('Slug', 'slug'),
            Text::make('Update Token', 'update_token')->readonly(),
            Text::make('Stripe ID', 'stripe_id')->nullable(),
            Text::make('Current Plan', 'current_billing_plan')->nullable(),
            DateTime::make('Trial Ends', 'trial_ends_at')->nullable(),
            DateTime::make('Created At', 'created_at')->readonly()->hideFromIndex(),
            DateTime::make('Updated At', 'updated_at')->readonly()->hideFromIndex(),
            HasMany::make('Subscriptions', 'subscriptions', TeamSubscription::class),
            BelongsToMany::make('Team Members', 'users', User::class)
                ->fields(function () {
                    return [
                        Select::make('Role')
                            ->options(
                                array_merge(
                                    Spark::roles(),
                                    [
                                        //default role
                                        Spark::defaultRole() => Str::ucfirst(Spark::defaultRole()),
                                        //owner role
                                        'owner' => 'Owner'
                                    ]
                                )
                            )
                    ];
                }),
        ];
    }
}
チーム購読リソース
<?php
namespace App\Nova;

use Laravel\Nova\Fields\BelongsTo;
use Laravel\Nova\Fields\DateTime;
use Laravel\Nova\Fields\HasMany;
use Laravel\Nova\Fields\ID;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\Number;
use Laravel\Nova\Fields\Text;

class TeamSubscription extends Resource
{
    public static $model = \Laravel\Spark\TeamSubscription::class;

    public static $group = 'Spark';

    public static $search = [
        'id',
        'name',
        'stripe_id',
        'stripe_plan',
        'stripe_status'
    ];

    public static $title = 'name';

    public function fields(Request $request)
    {
        return [
            ID::make()->sortable(),
            Text::make('Name', 'name')->nullable(),
            Text::make('Stripe ID', 'stripe_id')->nullable(),
            Text::make('Stripe Plan', 'stripe_plan')->nullable(),
            Text::make('Stripe Status', 'stripe_status')->nullable()->sortable(),
            Number::make('QTY', 'quantity')->nullable(),
            DateTime::make('Trial Ends', 'trial_ends_at')->nullable()->sortable(),
            DateTime::make('Ends At', 'ends_at')->nullable()->sortable(),
            DateTime::make('Created', 'created_at')->sortable()->readonly()->hideFromIndex(),
            DateTime::make('Updated At', 'updated_at')->sortable()->readonly()->hideFromIndex(),
            BelongsTo::make('Team', 'team', Team::class)->searchable(),
            HasMany::make('Subscription Items', 'items', TeamSubscriptionItem::class)
        ];
    }
}
チーム購読アイテムリソース
<?php
namespace App\Nova;

use Laravel\Nova\Fields\BelongsTo;
use Laravel\Nova\Fields\DateTime;
use Laravel\Nova\Fields\ID;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\Number;
use Laravel\Nova\Fields\Text;

class TeamSubscriptionItem extends Resource
{
    public static $model = \Laravel\Spark\TeamSubscriptionItem::class;

    public static $group = 'Spark';

    public static $search = [
        'id',
        'stripe_id',
        'stripe_plan',
    ];

    public function fields(Request $request)
    {
        return [
            ID::make()->sortable(),
            Text::make('Stripe ID', 'stripe_id')->nullable(),
            Text::make('Stripe Plan', 'stripe_plan')->nullable(),
            Number::make('QTY', 'quantity')->nullable(),
            DateTime::make('Created', 'created_at')->sortable()->readonly()->hideFromIndex(),
            DateTime::make('Updated At', 'updated_at')->sortable()->readonly()->hideFromIndex(),
            BelongsTo::make('Team Subscription', 'subscription', TeamSubscription::class)->searchable(),
        ];
    }
}