Laravel-Action 对代码的改造
前言
以往写过俩篇文章
[积德篇] 如何少写PHP "烂"代码 https://segmentfault.com/a/11...
举枪消灭"烂代码"的实战案例 https://segmentfault.com/a/11...
感觉文章中对Action的操作没有一个规范性的调用及编写。特此写了一个laravel-action包
https://github.com/CrazyCodes...
希望可以帮到你。
安装
下载composer包: composer require crazycodes/laravel-action
注入提供者到 config/app.php
'providers' => [// [...]CrazyCodes\ActionServiceProvider::class,
],
注册 Action
facade:
'aliases' => [// [...]'Action' => CrazyCodes\Facades\Action::class,
],
发布配置文件
php artisan vendor:publish --provider=CrazyCodes\ActionServiceProvider
配置项就一个
actionNamespace //设置你的action所在的命名空间
使用
继承Action方法获取规范的命名
namespace CrazyCodes\Action;class CreateUser extends Action
{}
继承的Action准备了两个方法
before
public function before($request)
{return $request;
}
Action被调用的同时会直接调用before方法执行。
after
public function after($request)
{return [];
}
可以选择不声明after方法。after主要用于调用其他Action
成员变量
public $beforeResultName = 'beforeResult';
public $afterResultName = 'afterResult';
用于获取返回的结果
调用
可以通过Facade调用
Action::use('YourAction',发送的参数);
或者使用全局函数
laravel_action('YourAction',发送的参数);
获取结果
得到的结果默认是对象。可以转换格式
function toJson();
function toArray();
结果展示
Array
array:2 ["beforeResult" => array:1 [0 => "aaa"]"afterResult" => []
]
JSON
{"beforeResult":["aaa"],"afterResult":[]}
Demo
依旧以创建用户为例
UserController
<?phpnamespace Examples;use CrazyCodes\Facades\Action;/*** Class UserController* @package Examples*/class UserController{public function create(){$request = ['username' => 'test','password' => 'test',];$result = Action::use ('CreateUser', $request);//全局方法//laravel_action ('CreateUser', $request);// return $result->toArray();return $result->toJson ();}}
CreateUser
<?phpnamespace Examples;use CrazyCodes\Action;/*** Class CreateUser* 创建用户* @package Examples*/class CreateUser extends Action{public function before($request){var_dump ($request);return ['status' => 'success'];}public function after($request){var_dump ($request);return Action::use ('CreateWallet', $request);}}
CreateWallet
<?phpnamespace Examples;use CrazyCodes\Action;/*** 创建用户钱包* Class CreateWallet* @package Examples*/class CreateWallet extends Action{public function before($request){var_dump ($request);return ['status' => 'success'];}}
致谢
感谢你看到这里,希望这篇文章让你的代码更优雅。谢谢
原文地址:https://segmentfault.com/a/1190000016052574
转载于:https://www.cnblogs.com/lalalagq/p/9974969.html
Laravel-Action 对代码的改造相关推荐
- 06_[nvim0.5+从0单排]_Native LSP 自动补全、语法检查、code action、代码段—TypeScript篇
视频与目录 项目 值 教程目录 https://blog.csdn.net/lxyoucan/article/details/120641546 视频全屏 https://www.bilibili.c ...
- 代码提示_PHPStorm 支持 Laravel Facades 的代码提示
好久没用 Laravel 和 PHPStorm 了,最近开发了小项目,用的时候发现 Laravel 的 Facades 是没有代码补全提示的,原因是 Facades 是基于 静态方法重载 __call ...
- dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人
是不是大家也会觉得代码审查里面审查代码格式化问题是无意义的,但是不审查又觉得过不去?是否有个专门的工具人,用来协助修复代码格式化的问题?本文来安利大家一个特别好用的方法,使用 dotnet 完全开源的 ...
- laravel生成php代码,laravel代码生成器
laravel-generator ⛵laravel-generator 是一个为laravel应用快速生成代码的图形化界面代码生成器 项目地址 github 码云 Version 2.0 添加数据表 ...
- 基于模板方法+协调者委托对现有冗余代码的改造案例
文章目录 一.背景 二.分析 1.CustomerRelationService 2.CustomerRelationServiceImpl 三.重构 1.UML设计 2.BindContext 3. ...
- 2s-AGCN Skeleton-Based Action Recognition 代码学习
一, 大致框架 二, 零散的代码学习 一, 大致框架 data-get(N, C, T, V, M)(已经包含时间和空间信息)(样本数,channel,时间帧数,num_node,人数). joint ...
- 【laravel】同一代码段内,先更新数据,后查询修改的数据,查询结果错误的问题
如标题所言,是什么意思呢?举个栗子,需求如下: 你是一个电话销售人员,手头有一些待call电话单,每个电话单上有N个不同的电话号码,需要你每打一个电话就标记为"已打".当一个电话单 ...
- php+pv统计代码实现,Laravel 10 行代码实现简单的网站 pv uv 统计
最近在优化博客呀,想做一个统计网站 pv uv 的功能,虽然有第三的统计平台再用,但还是想自己写一个啊. 其实统计的数据非常简单,就是网站的访问量丶访客量. public function __con ...
- Laravel核心代码学习 -- Facades
Facades 什么是Facades Facades是我们在Laravel应用开发中使用频率很高的一个组件,叫组件不太合适,其实它们是一组静态类接口或者说代理,让开发者能简单的访问绑定到服务容器里的各 ...
最新文章
- 在VMWare上安装linux
- 梯度下降原理及在线性回归、逻辑回归中的应用
- Android开发之EditText输入框限制输入数字和字母的实现方式
- POJ3096Surprising Strings(map)
- Hive设计和体系结构
- SQL Server向表中插入数据
- fetch first mysql_MySQL多版本并发控制机制(MVCC)源码浅析
- Spring Boot - 开发Web应用
- Ceilometer - Install the API behind mod_wsgi
- Pandas系列(一)数据读取、数据结构Dataframe和Series
- 冰点还原精灵DeepFreeze重启后图标不见了
- 可以搜python题答案的app-可以搜Python题答案的APP有哪些?
- 香港服务器到大陆各地的网络延迟大小
- Matlab中semilogy函数使用
- next项目部署到服务器pm2进程守护
- CNZZ站长统计怎么用
- 完美解决35dir获取网站缩略图问题(两种方法)
- (干货)备战2021年软考中级网络工程师-03-计算机系统开发基础
- ECMAScript认识续
- 【技术公开课】iOS App研发的最后冲刺:内测与部署
热门文章
- html表白_HTML 表白网页
- ta是什么职位_想好了吗~你为什么来博智林
- springboot获取静态图片路径_SpringBoot中的全局异常处理你确定你真的知道吗?
- 【sprinb-boot】配置和lib分离打包
- html filter 作用,css滤镜有什么作用?
- 多功能雨伞项目计划书_雨伞项目投资计划书
- as3调用java_[AS3]AMF3+JAVA的调用范例
- hive mysql hdfs关系_Hive中的数据库、表、数据与HDFS的对应关系
- linux在没有x远程桌面,xmanager远程桌面控制linux
- Chromebook开发者模式Linux,Chromebook 的开发者模式和开发者版本有什么区别?