Victor-Falcon / laravel-task
简单的 Laravel 任务触发器
v1.2.2
2021-07-01 08:10 UTC
Requires
- php: >=8.0
- composer/composer: ^2.0
- illuminate/support: ^6.0|^7.0|^8.0
Requires (Dev)
- orchestra/testbench: ^4.0|^5.0|^6.0
- phpunit/phpunit: ^8.4|^9.0
README
目录
安装
通过 composer 安装
# PHP >= 8 composer require victor-falcon/laravel-task # Previous PHP versions composer require victor-falcon/laravel-task:1.1.4
使用
1. 基本使用
使用以下命令创建一个简单的任务
artisan task:make Shop/CreateUserShop
你可以传递 Shop/CreateUserShop 到子文件夹创建类或仅传递任务名称。默认路径是
app/Tasks
。
<?php declare(strict_types=1); namespace App\Tasks\Shop; use VictorFalcon\LaravelTask\Task; use VictorFalcon\LaravelTask\Taskable; final class CreateUserShop implements Task { use Taskable; private User $user; public function __construct(User $user) { $this->user = $user; } public function handle(ShopCreator $creator): Shop { // Create your shop } }
并触发它
$shop = CreateUserShop::trigger($user);
2. 带验证
如果你想,你可以使用 Laravel 验证器将验证数据传递到任务中。例如,如果你需要验证用户创建,你可以这样做。
final class CreateUser implements Task { public function rules(): array { return [ 'name' => 'required|string|min:5', 'email' => 'required|email|unique:users,email', ]; } public function handle(): User { return User::create($this->data); } }
然后你可以使用以下方式触发你的任务,并带有额外的数据
CreateUser::trigger()->withValid([ 'name' => 'Víctor Falcón', 'email' => 'hi@victorfalcon.es', ]);
你可以使用任务中的 messages(): array
方法自定义消息或使用 customAttributes(): array
添加自定义属性。
如果你想自定义验证器错误包的名称,只需在类中定义 string $errorBag
属性。
3. 带授权
有时你需要检查触发任务的用户是否有权限。你可以通过在任务中添加一个简单的 authorize(): bool
方法来实现。如果此方法返回 false
,则会在执行前抛出 AuthorizationException
。
public function authorize(): bool { return $this->user()->can('create', Product::class); }
在任何任务中,你可以使用 $this->user()
访问当前登录用户,或者如果你想,你可以通过这样做传递一个用户对象
CreateProduct::trigger()->by($user);
4. 恢复响应
默认情况下,每个任务都会在没有任何返回值的情况下执行。因此,如果你想恢复任务的结果,你必须调用 result()
方法。
// This will return the result of the `handle` method inside our task $product = CreateProduct::trigger()->withValid($data)->result();
生成 IDE 帮助
为了使编写和使用你的任务更加容易,你可以使用 artisan task:ide-help
命令自动生成 _ide_helper_tasks.php
文件。
更新配置
如果你想,你可以发布包配置以自定义,例如,你想将任务存储在哪里
artisan vendor:publish --tag=laravel-task