novadaemon/larafeat

Laravel 包,用于实现领域驱动设计模式。灵感来自 lucidarch/lucid

资助包维护!
novadaemon

安装: 68

依赖项: 0

建议者: 0

安全性: 0

星星: 1

观察者: 1

分支: 0

开放问题: 0

类型:项目

v1.0.1 2023-06-15 21:03 UTC

This package is auto-updated.

Last update: 2024-09-16 18:17:56 UTC


README

Larafeat 是 Lucidarch 的简化修改。它允许你在 Laravel 应用程序中构建和提供功能。

Larafeat

安装

您可以通过 composer 安装此包

composer require novadaemon/larafeat

此包支持 Laravel 9 和 Laravel 10。

用法

使用命令 make:feature 创建新的功能

php artisan make:feature MyAwesomeFeature

你可以写不带 "Feature" 前缀的名字,命令会将其添加到类和文件名中。

php artisan make:feature MyAwesome

上述命令在 app/Features 目录中创建了 MyAwesomeFeature 类文件。

<?php

namespace App\Features;

use Illuminate\Http\Request;
use Novadaemon\Larafeat\Feature;

class MyAwsomeFeature extends Feature
{
    public function handle(Request $request)
    {
        $order = $request->input('order');

        //...
    }
}

此外,该命令还在 tests 目录中生成了 MyAwesomeFeatureTest 文件。

<?php

namespace Tests\Feature;

use Tests\TestCase;
use App\Features\MyAwsomeFeature;

class MyAwsomeFeatureTest extends TestCase
{
    public function test_my_awsome_feature()
    {
        $this->markTestIncomplete();
    }
}

make:fature 命令接受 --pest 选项。如果此选项存在,为测试创建的文件将是一个 Pest 文件。

<?php

namespace Tests\Feature;

test('example', function () {
    $response = $this->get('/');

    $response->assertStatus(200);
});

用法

要开始提供服务功能,你必须从 Larafeat 控制器扩展你的控制器。

<?php

namespace App\Controllers;

use Novadaemon\Larafeat\Controllers\Controller;
use App\Features\MyAwesomeFeature;

class MyController extends Controller
{
    public function get()
    {
        return $this->serve(MyAwesomeFeature::class);
    }
}

你可以在 Feature 构造函数中定义类属性,然后,你可以通过 serve 方法的 arguments 参数传递它们。

<?php

namespace App\Features;

use Illuminate\Http\Request;
use Novadaemon\Larafeat\Feature;

class MyAwsomeFeature extends Feature
{
    public function __construct(private string $name)
    {
    }

    public function handle(Request $request)
    {
        $name = $this->name;

        //...
    }
}
<?php

namespace App\Controllers;

use Novadaemon\Larafeat\Controllers\Controller;
use App\Features\MyAwesomeFeature;

class MyController extends Controller
{
    public function get()
    {
        return $this->serve(MyAwesomeFeature::class, ['name' => 'Jesús']);
    }
}

在功能内部,你可以使用 run 方法调度 Laravel 作业

<?php

namespace App\Features;

use App\Jobs\GreetingJob;
use Illuminate\Http\Request;
use Novadaemon\Larafeat\Feature;

class MyAwsomeFeature extends Feature
{
    public function __construct(private string $name)
    {
    }

    public function handle(Request $request)
    {
        return $this->run(new GrettingJob($this->name));
    }
}

贡献

贡献非常简单,并且非常受欢迎!只需发送一个 PR 或创建一个 issue!

致谢

许可

MIT 许可证 (MIT)。请参阅 许可文件 获取更多信息。