前言

以往写过俩篇文章
[积德篇] 如何少写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 对代码的改造相关推荐

  1. 06_[nvim0.5+从0单排]_Native LSP 自动补全、语法检查、code action、代码段—TypeScript篇

    视频与目录 项目 值 教程目录 https://blog.csdn.net/lxyoucan/article/details/120641546 视频全屏 https://www.bilibili.c ...

  2. 代码提示_PHPStorm 支持 Laravel Facades 的代码提示

    好久没用 Laravel 和 PHPStorm 了,最近开发了小项目,用的时候发现 Laravel 的 Facades 是没有代码补全提示的,原因是 Facades 是基于 静态方法重载 __call ...

  3. dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人

    是不是大家也会觉得代码审查里面审查代码格式化问题是无意义的,但是不审查又觉得过不去?是否有个专门的工具人,用来协助修复代码格式化的问题?本文来安利大家一个特别好用的方法,使用 dotnet 完全开源的 ...

  4. laravel生成php代码,laravel代码生成器

    laravel-generator ⛵laravel-generator 是一个为laravel应用快速生成代码的图形化界面代码生成器 项目地址 github 码云 Version 2.0 添加数据表 ...

  5. 基于模板方法+协调者委托对现有冗余代码的改造案例

    文章目录 一.背景 二.分析 1.CustomerRelationService 2.CustomerRelationServiceImpl 三.重构 1.UML设计 2.BindContext 3. ...

  6. 2s-AGCN Skeleton-Based Action Recognition 代码学习

    一, 大致框架 二, 零散的代码学习 一, 大致框架 data-get(N, C, T, V, M)(已经包含时间和空间信息)(样本数,channel,时间帧数,num_node,人数). joint ...

  7. 【laravel】同一代码段内,先更新数据,后查询修改的数据,查询结果错误的问题

    如标题所言,是什么意思呢?举个栗子,需求如下: 你是一个电话销售人员,手头有一些待call电话单,每个电话单上有N个不同的电话号码,需要你每打一个电话就标记为"已打".当一个电话单 ...

  8. php+pv统计代码实现,Laravel 10 行代码实现简单的网站 pv uv 统计

    最近在优化博客呀,想做一个统计网站 pv uv 的功能,虽然有第三的统计平台再用,但还是想自己写一个啊. 其实统计的数据非常简单,就是网站的访问量丶访客量. public function __con ...

  9. Laravel核心代码学习 -- Facades

    Facades 什么是Facades Facades是我们在Laravel应用开发中使用频率很高的一个组件,叫组件不太合适,其实它们是一组静态类接口或者说代理,让开发者能简单的访问绑定到服务容器里的各 ...

最新文章

  1. 在VMWare上安装linux
  2. 梯度下降原理及在线性回归、逻辑回归中的应用
  3. Android开发之EditText输入框限制输入数字和字母的实现方式
  4. POJ3096Surprising Strings(map)
  5. Hive设计和体系结构
  6. SQL Server向表中插入数据
  7. fetch first mysql_MySQL多版本并发控制机制(MVCC)源码浅析
  8. Spring Boot - 开发Web应用
  9. Ceilometer - Install the API behind mod_wsgi
  10. Pandas系列(一)数据读取、数据结构Dataframe和Series
  11. 冰点还原精灵DeepFreeze重启后图标不见了
  12. 可以搜python题答案的app-可以搜Python题答案的APP有哪些?
  13. 香港服务器到大陆各地的网络延迟大小
  14. Matlab中semilogy函数使用
  15. next项目部署到服务器pm2进程守护
  16. CNZZ站长统计怎么用
  17. 完美解决35dir获取网站缩略图问题(两种方法)
  18. (干货)备战2021年软考中级网络工程师-03-计算机系统开发基础
  19. ECMAScript认识续
  20. 【技术公开课】iOS App研发的最后冲刺:内测与部署

热门文章

  1. html表白_HTML 表白网页
  2. ta是什么职位_想好了吗~你为什么来博智林
  3. springboot获取静态图片路径_SpringBoot中的全局异常处理你确定你真的知道吗?
  4. 【sprinb-boot】配置和lib分离打包
  5. html filter 作用,css滤镜有什么作用?
  6. 多功能雨伞项目计划书_雨伞项目投资计划书
  7. as3调用java_[AS3]AMF3+JAVA的调用范例
  8. hive mysql hdfs关系_Hive中的数据库、表、数据与HDFS的对应关系
  9. linux在没有x远程桌面,xmanager远程桌面控制linux
  10. Chromebook开发者模式Linux,Chromebook 的开发者模式和开发者版本有什么区别?