lorisleiva/laravel-actions

Laravel 组件,专门处理特定任务

资助包维护!
lorisleiva

安装数: 3,586,672

依赖者: 61

建议者: 1

安全性: 0

星星: 2,463

关注者: 32

分支: 121

开放问题: 28


README

Latest Version on Packagist GitHub Tests Action Status Total Downloads

hero

处理特定任务的类。

此包通过专注于应用程序提供的行为,引入了一种组织 Laravel 应用程序逻辑的新方式。

而不是创建控制器、作业、监听器等,它允许您创建一个处理特定任务的 PHP 类,并将其作为您想要的任何内容运行。

因此,它鼓励您将重点从

"我需要哪些控制器?","我应该为这个创建一个 FormRequest 吗?","这个应该在一个作业中异步运行吗?"等等。

转向

"我的应用程序实际上做什么?"

安装

composer require lorisleiva/laravel-actions

文档

📚 在 laravelactions.com 读取完整文档

基本用法

使用 php artisan make:action PublishANewArticle 创建您的第一个操作,并在需要将操作作为 X 运行时定义 asX 方法。例如,asControllerasJobasListener 和/或 asCommand

class PublishANewArticle
{
    use AsAction;

    public function handle(User $author, string $title, string $body): Article
    {
        return $author->articles()->create([
            'title' => $title,
            'body' => $body,
        ]);
    }

    public function asController(Request $request): ArticleResource
    {
        $article = $this->handle(
            $request->user(),
            $request->get('title'),
            $request->get('body'),
        );

        return new ArticleResource($article);
    }

    public function asListener(NewProductReleased $event): void
    {
        $this->handle(
            $event->product->manager,
            $event->product->name . ' Released!',
            $event->product->description,
        );
    }
}

作为对象

现在,您可以通过使用 run 方法将其作为对象运行您的操作,如下所示

PublishANewArticle::run($author, 'My title', 'My content');

作为控制器

只需在路由文件中将您的操作注册为可调用的控制器。

Route::post('articles', PublishANewArticle::class)->middleware('auth');

作为监听器

只需将您的操作注册为 NewProductReleased 事件的监听器。

Event::listen(NewProductReleased::class, PublishANewArticle::class);

然后,每当分发 NewProductReleased 事件时,您的操作的 asListener 方法将被调用。

event(new NewProductReleased($manager, 'Product title', 'Product description'));

等等...

除了将操作作为对象、控制器和监听器运行之外,Laravel Actions 还支持作业、命令,甚至可以在测试中模拟操作。

📚 查看完整文档以了解 Laravel Actions 提供的所有内容.