SuperAPI AI 工具集

laravel-actions

编程与开发

查看项目

更新于 10-15 11:02

技能介绍

Laravel Actions 是一个面向 Laravel 的 PHP 包,包名为 lorisleiva/laravel-actions,核心理念是:编写一个只负责一项具体任务的 PHP 类,并让这个类能以对象、控制器、任务(Job)、事件监听器或命令等不同形态运行,从而在不同入口之间复用同一段业务逻辑。

【安装与创建】 安装:composer require lorisleiva/laravel-actions 创建:php artisan make:action MyAction

【核心结构】 每个 action 都是普通 PHP 类,使用 AsAction trait,并包含一个 handle 方法,例如 PublishNewArticle 类中 handle(User $author, string $title, string $body): Article。约定包括:将 action 放在 app/Actions/ 下并按主题分组(如 app/Actions/Articles/);以动词开头的短句命名,如 SendWelcomeEmail、CreateInvoice、SyncContacts;依赖使用构造函数注入,因为 action 始终从容器中解析。

【作为对象运行】 可通过 PublishNewArticle::run(...) 解析并运行,通过 make() 仅解析,通过 runIf / runUnless 按条件执行。

【作为控制器】 可像可调用控制器一样在路由中注册,如 Route::post('/articles', PublishNewArticle::class)。可实现 asController 将请求数据映射到 handle 参数;若省略 asController,则 handle 直接作为可调用方法使用。可在 action 自身定义控制器中间件(getControllerMiddleware),可针对 JSON 与 HTML 返回不同响应(jsonResponse、htmlResponse),也可通过静态 routes 方法内联注册路由并配合 Actions::registerRoutes(['app/Actions']) 使用,还支持为多端点 action 显式指定路由方法。

【验证与授权(作为控制器时)】 可注入 ActionRequest 以触发 action 自身定义的验证与授权:authorize 方法进行权限判断,rules 方法定义规则,另提供 prepareForValidation、withValidator、afterValidator、getValidator、getValidationData、getValidationMessages、getValidationAttributes、getValidationRedirect、getValidationErrorBag、getValidationFailure、getAuthorizationFailure 等扩展钩子。

【作为任务(Job)】 支持异步分发 dispatch、条件分发 dispatchIf / dispatchUnless、同步分发 dispatchSync、响应后分发 dispatchAfterResponse。仅当任务特有行为与 handle 不同时才实现 asJob。可配置队列名、重试次数、超时、最大异常数等默认值,也可通过 configureJob 做更精细配置(onQueue、delay),并提供 getJobBackoff、getJobRetryUntil、getJobMiddleware。支持唯一任务(实现 ShouldBeUnique 并定义 getJobUniqueId、getJobUniqueFor)、任务链(withChain、makeJob)、批处理(Bus::batch 配合 makeJob),以及 Horizon 的 getJobTags 与 getJobDisplayName。

【作为事件监听器】 可在 EventServiceProvider 的 $listen 中注册,或用 Event facade 注册;如需队列化监听器,action 实现 ShouldQueue;可用 asListener 将事件数据映射到 handle 参数。

【作为命令】 可在 Kernel::$commands 中注册,或通过 Actions::registerCommands(['app/Actions']) 自动注册。可定义 commandSignature、commandDescription,并实现 asCommand;也支持动态签名、描述、帮助与隐藏命令(getCommandSignature、getCommandDescription、getCommandHelp、isCommandHidden)。

【测试与 Mock】 支持 mock 设置期望、shouldRun / shouldNotRun 简写、partialMock 局部 mock、spy 先运行后断言,以及 isFake、clearFake 生命周期辅助方法。可通过 Queue::fake 配合 assertPushed、assertNotPushed、assertPushedOn 等断言任务是否被分发及分发次数、队列。

【WithAttributes(可选,v2.1+)】 适用于希望拥有经过验证的统一属性集合的场景(例如从 v1 迁移,或同一套验证需在对象与控制器用法间通用)。使用 WithAttributes 时需注意 ActionRequest 不会自动验证,需要时手动调用 $request->validate()。提供 fill、set、get、has、all、only、except、fillFromRequest、validateAttributes 等方法。

【更细粒度的 trait】 除 AsAction 外,可按需选择:AsObject(run、make、runIf、runUnless)、AsController、AsJob、AsListener、AsCommand、AsFake。

【参考文档】 完整 API 详情见 references/api.md,其中列出每个 trait 的完整方法列表。

【限制】 资料未说明该包的收费、价格、平台或性能效果等事实,相关信息暂未提供。