raid / core-action
Raid Core Action 包
dev-main
2024-02-23 20:23 UTC
Requires
- php: ^8.2
- raid/core-command: *
- raid/core-enum: *
- raid/core-gate: *
Requires (Dev)
- laravel/pint: *
This package is auto-updated.
Last update: 2024-09-23 21:43:34 UTC
README
此包负责处理系统中的所有操作。
安装
composer require raid/core-action
配置
php artisan core:publish-action
使用
class UserController extends Controller { /** * Invoke the controller method. */ public function __invoke(Request $request, CreateUserAction $action) { $action->execute($request->only(['name', 'email', 'password'])); // or using the static call CreateUserAction::exec($request->only(['name', 'email', 'password'])); } }
如何操作
让我们从我们的动作类 CreateUserAction
开始。
您可以使用命令创建动作类。
php artisan make-action CreateUserAction
<?php namespace App\Actions; use Raid\Core\Action\Actions\Contracts\ActionInterface; use Raid\Core\Action\Actions\Action; class CreateUserAction extends Action implements ActionInterface { /** * {@inheritdoc} */ public const ACTION = ''; /** * {@inheritDoc} */ public const ACTIONABLE = ''; /** * Handle the action. */ public function handle() { } }
动作类必须实现 ActionInterface
接口。
动作类必须扩展 Action
类。
动作类必须定义 ACTION
常量,即动作名称。
动作类必须定义 ACTIONABLE
常量,即与动作相关的可操作类。
动作类必须定义 handle
方法,该方法将在执行动作时被调用。
让我们完成我们的动作类。
<?php namespace App\Actions; use App\Models\User; use Raid\Core\Action\Actions\Contracts\ActionInterface; use Raid\Core\Action\Actions\Action; class CreateUserAction extends Action implements ActionInterface { /** * {@inheritdoc} */ public const ACTION = 'create'; /** * {@inheritDoc} */ public const ACTIONABLE = User::class; /** * Handle the action. */ public function handle(array $data): User { return $this->actionable()->create($data); } }
handle
方法将在执行动作时被调用。
actionable
方法将返回动作相关的模型。
现在我们已经准备好执行动作了。
class UserController extends Controller { /** * Invoke the controller method. */ public function __invoke(Request $request, CreateUserAction $action) { $user = $action->execute($request->only(['name', 'email', 'password'])); } }
用户已创建,一切正常,但我们可以更结构化我们的模式。
从模型执行动作
我们需要在我们的可操作类中使用 Actionable
特性。
这允许我们从可操作类本身执行动作,并将该类与其动作相关联。
<?php namespace App\Models; use Raid\Core\Action\Traits\Action\Actionable; class User extends Account { use Actionable; }
我们可以以两种方式定义动作。
- 定义
getActions
方法。
<?php namespace App\Models; use Raid\Core\Action\Traits\Action\Actionable; class User extends Account { use Actionable; /** * Get eventable actions. */ public static function getActions(): array { return [ // here we define our action classes. CreateUserAction::class, ]; } }
- 或在
config/action.php
文件中定义带有动作的可操作类。
'actions' => [ // here we define our actionable class. User::class => [ // here we define our action classes. CreateUserAction::class, ], ],
现在我们可以从模型本身执行动作。
class UserController extends Controller { /** * Invoke the controller method. */ public function __invoke(Request $request) { $user = User::action('create', $request->only(['name', 'email', 'password'])); } }
动作将被执行,并将创建模型。
就是这样。
许可
MIT 许可证(MIT)。有关更多信息,请参阅许可文件。
鸣谢
安全性
如果您发现任何安全相关的问题,请通过电子邮件报告,而不是使用问题跟踪器。
关于Raid
Raid 是由 Mohamed Khedr 创建的 PHP 框架,由 Mohamed Khedr 维护。
支持Raid
Raid 是一个 MIT 许可的开源项目。它是一个独立项目,其持续发展得以实现。