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
<?php
namespace 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
<?php
namespace 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
<?php
namespace 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
Laravel-Action 对代码的改造的更多相关文章
- Windows Live Writer 代码插件改造
源码和插件都在后面,如果不想看我神神叨叨的可以直接到文章后面下载 一 .找插件 在使用Windows Live Writer 经常要用到插入代码的功能,根据博客园中教程,分别使用了: WindowsL ...
- 【转】Windows Live Writer 代码插件改造
源码和插件都在后面,如果不想看我神神叨叨的可以直接到文章后面下载 一 .找插件 在使用Windows Live Writer 经常要用到插入代码的功能,根据博客园中教程,分别使用了: WindowsL ...
- laravel前台html代码不显示
后天向前台传输变量,如果能取到变量数据,还有代码,但是不显示图片 可以把{{}}换成{!! !!}试试.
- laravel phpstorm IDE 代码提示
第一步:在项目的composer.json中添加如下一行 "require": { "laravel/framework": "5.0.*" ...
- 【laravel】同一代码段内,先更新数据,后查询修改的数据,查询结果错误的问题
如标题所言,是什么意思呢?举个栗子,需求如下: 你是一个电话销售人员,手头有一些待call电话单,每个电话单上有N个不同的电话号码,需要你每打一个电话就标记为”已打“.当一个电话单上的号码都标记为”已 ...
- 委托代码func和Action的基本用法
这是微软简化后的委托写法,其中,func适合带返回参数的方法调用,action适合没有返回参数的方法调用 FUNC方法代码: public string GetPeopleInfo(string na ...
- laravel代码规范强制检查
目录 介绍 代码规范检查与修复 在git commit时自动检查代码规范 后记 介绍 在团队协作开发中,代码规范是必要的.以前的规范都是自己定,然后手动检查,很难做到有效的约束. 现代的PHP,则有得 ...
- 使用dva改造旧项目的数据流方案
前言 最近在给自己的脚手架项目转到TypeScript时,遇到了一些麻烦. 项目之前采用的是react + react-redux + redux-thunk + redux-actions +re ...
- 第十四节:Asp.Net Core 中的跨域解决方案(Cors、jsonp改造、chrome配置)
一. 整体说明 1. 说在前面的话 早在前面的章节中,就详细介绍了.Net FrameWork版本下MVC和WebApi的跨域解决方案,详见:https://www.cnblogs.com/yaope ...
随机推荐
- 应用程序无法正常启动 0xc0000013 vs2013
今天下午切换到Windows 优化代码,在debug 的时候一直出现这个问题,折腾了很久,发现原来是系统环境变量的问题,我之前装了双系统,讲原来win7 下的一块E盘删掉做了Linux 盘,而系统环境 ...
- SPOJ 962 Intergalactic Map (网络最大流)
http://www.spoj.com/problems/IM/ 962. Intergalactic Map Problem code: IM Jedi knights, Qui-Gon Jinn ...
- Linux 下Python调用C++编写的动态库
在工程中用到使用Python调用C++编写的动态库,结果报如下错误: OSError: ./extract_str.so: undefined symbol: _ZNSt8ios_base4InitD ...
- linux下的so、o、lo、a、la文件的区别
o: 编译的目标文件a: 静态库,其实就是把若干o文件打了个包so: 动态链接库(共享库) lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息la: 使用libtool编译出 ...
- 60.extjs-布局 (在column布局中使用fieldset 和 在fieldset中使用column布局)
转自:https://blog.csdn.net/snn1410/article/details/8817821/ 在标准的html中,需要把输入项都放到fieldset中,一次来显示分组结构.虽然E ...
- [Swift通天遁地]三、手势与图表-(1)监听屏幕上触摸事件的各种状态
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- js判断客户端是手机端还是PC端
封装函数: function isPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", ...
- int(3)和int(11)区别
- UNIX环境高级编程--1
前期准备: 下载apue3源文件(从apuebook.com上),然后编译(make)之后,得到libapue.a动态链接文件(.o 就相当于windows里的obj文件 .a 是好多个.o合在一起, ...
- 313 Super Ugly Number 超级丑数
编写一段程序来寻找第 n 个超级丑数.超级丑数是指其所有质因数都在长度为k的质数列表primes中的正整数.例如,[1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] ...