Laravel中的动作课是什么?为什么要使用它们?
Laravel中的动作类应用于将复杂的业务逻辑封装到单一责任类中,以提供更好的代码组织。 1。他们通过将逻辑从控制器中移出来实施关注点。 2。它们提高了控制器,命令和队列之间的可重复性。 3。通过隔离业务运营,它们可以更轻松地进行测试。 4。它们通过清晰的命名和目录结构增强可扩展性。 5。借助包装,他们可以支持排队,事件聆听和派遣工作。将它们用于多步操作或重复使用逻辑时,但是除非标准化,否则避免使用简单的CRUD。这种方法使控制器保持较小,可提高可维护性,并支持中等大型Laravel应用中的清洁架构。
Laravel中的动作类是将特定业务逻辑封装到单一责任类中的一种方式。您没有将复杂的逻辑直接放入控制器,模型或路由中,而是将其移至专用类(称为“行动”类)中,该类代表您的应用程序中的单个操作或操作。

它们默认不在Laravel中,但它们遵循许多开发人员采用的设计模式(通常使用laravel-actions
或spatie/laravel-artisan-ddd
等软件包来改善代码组织和可维护性。
✅为什么要使用动作类?
1。关注的分离
控制器应处理HTTP问题,例如验证,重定向和响应,而不是复杂的业务逻辑。

而不是这个:
//在控制器中 公共功能商店(请求$请求) { $ data = $ request-> validate([...]); $ order = order = :: create([...]); 库存:: dectement('股票',$ data ['wittity']); PaymentGateway :: calle($订单); 通知:: send($订单 - >用户,新订单确认($ order)); 返回redirect() - > back(); }
您这样做:

//在控制器中 公共功能商店(StoreOrderRequest $请求) { $ order = storeorderaction :: run($ request-> varicated()); 返回redirect() - > back(); }
所有逻辑都活在StoreOrderAction
中,保持控制器清洁。
2。可重复使用
您可以从不同地方重复使用相同的动作 - API端点,工匠命令,队列或其他动作。
例如:
//来自控制器 $ order = storeorderaction :: run($ data); //来自工匠司令部 $ order = storeorderaction :: run($ input-> getArguments());
相同的逻辑,没有重复。
3。可检验性
在一个类中的所有逻辑中,您都可以隔离地测试业务操作 - 无需撞击路线或嘲笑HTTP层。
公共功能test_it_creates_an_order_and_updates_inventory() { $ order = storeorderaction :: run([...]); $ this-> assertDatabasehas('orders',[...]); $ this-> assertequals(9,库存:: first() - >股票); }
干净,快速,集中的测试。
4。更好的组织和可扩展性
随着您的应用程序的增长,控制器和模型变得肿。动作课程通过组织逻辑围绕正在发生的事情而不是从哪里来的逻辑来帮助您扩展。
常见的命名模式:
-
CreateUserAction
-
ProcessPodcastUploadAction
-
SendEmailReminderAction
您甚至可以将它们与诸如Actions/Orders/
, Actions/Users/
等的目录分组。
5。支持工作,听众等(包装)
一些软件包(例如laravel-actions
)让您定义可以:
-
implements ShouldQueue
- 用作活动听众
- 自动创建作业或同一班的听众
例子:
sendwelcomeemailaction supperuse { 公共功能句柄(用户$用户):无效 { 邮件:: to($ user) - > send(新的欢迎网络邮件); } }
现在您可以像工作一样派遣它:
sendwelcomeemailaction :: dispatch($ user);
✅您什么时候应该使用它们?
使用以下操作类:
- 操作涉及多个步骤或模型
- 在多个地方需要相同的逻辑
- 您的控制器或模型方法的时间太长
- 您想要更清晰,更可维护的代码
除非您在整个应用程序中标准化,否则不要过度使用它们进行简单的CRUD操作。
概括
行动课为您提供帮助:
- 保持控制器薄
- 组织业务逻辑
- 更轻松地重用和测试代码
- 干净地扩展您的应用程序
它们是清洁Laravel架构的最佳实践,尤其是在中型和大型应用中。
基本上,如果某件事做一些重要的事情,请采取行动 - 它使您的应用程序更易于理解和更改。
以上是Laravel中的动作课是什么?为什么要使用它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undress AI Tool
免费脱衣服图片

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Stock Market GPT
人工智能驱动投资研究,做出更明智的决策

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

定义调度:在App\Console\Kernel类的schedule方法中使用Schedule对象配置Artisan命令调度;2.设置频率:通过everyMinute、daily、hourly等链式方法或cron语法设定执行频率;3.传递参数:使用数组或字符串向命令传递参数;4.调度Shell命令:使用exec方法运行系统命令;5.添加条件:使用when、weekdays等方法控制执行时机;6.输出处理:使用sendOutputTo、appendOutputTo或emailOutputTo记录或

Laravel从7版本开始引入了基于Illuminate\Support\Stringable的流畅字符串操作,答案是使用Str::of()启动链式调用,1.通过Str::of('string')创建Stringable实例并链式调用方法,2.常用方法包括trim、replace、append、slug、upper等进行格式化处理,3.使用when($condition,$callback)实现条件转换,4.利用after、before、substr等方法提取字符串片段,5.在实际应用中可用于清

使用字符串字段和PHP枚举是Laravel中处理枚举的最佳方式。1.在迁移中使用string类型字段并可选添加checkIn约束;2.定义带有字符串backing值的PHP枚举(PHP8.1 );3.在模型中通过$casts将字段自动转换为枚举实例;4.在表单验证中使用Rule::in(Enum::values())确保输入合法;5.在工厂和种子文件中使用Enum::cases()或fake()->enum()生成测试数据;6.查询时使用枚举的->value属性或直接比较枚举实例。该

SoftdeletesinLaravelallowyoutomarkrecordsasdeletedwithoutremovingthemfromthedatabasebysettingadeleted_attimestamp,whichenablesdatarecoverywhenneeded.1.AddtheSoftDeletestraittoyourmodel:importanduseIlluminate\Database\Eloquent\SoftDeletesinyourmodelcl

创建Laravel项目并安装Sanctum和Pusher包;2.配置Pusher凭证并设置广播驱动;3.创建消息模型及迁移;4.创建实现ShouldBroadcast的MessageSent事件;5.设置Sanctum认证及API路由并实现消息控制器;6.前端安装并配置LaravelEcho和PusherJS;7.使用Echo加入聊天频道并监听消息;8.在channels.php中定义广播授权逻辑;9.启动服务并测试实时消息传递,可选自建LaravelWebSockets服务,整个流程通过Lar

Installthespatie/laravel-sitemappackageusingComposerandpublishitsconfigfileifneeded.2.Createaroutetogenerateandservethesitemapdynamically,eitherbywritingittoafileoroutputtingXMLdirectly.3.CustomizethesitemapbyaddingstaticanddynamicURLs,suchasblogpost

创建模型和迁移:使用phpartisanmake:modelPost-m生成模型和迁移文件,定义表结构后运行phpartisanmigrate;2.基本CRUD操作:通过Post::all()、find()、create()、save()和delete()方法实现数据的查询、创建、更新和删除;3.使用Eloquent关联:在模型中定义belongsTo和hasMany关系,并通过with()方法实现关联数据的预加载以避免N 1查询问题;4.Eloquent查询:利用查询构造器链式调用如where

laravelforgeForgeSaserVerautomationPlatFormThatSimplifiesDeployingLaraveLavelApplicationsByManagingInfrastrastureAndDeploymentsscripts.1.SetupyourserserserverbyConnectingAcloudProvider,创建Aseraserverviaforge,CreengunAserverviaforge,andaddingyyoursiteWithAdoMain,andAddingDdingYoursiteWithAdoMain,thatautathateautomateConfiguratemateConfiguratemanticallatyConfigur
