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 ...
随机推荐
- 放大的X(杭电2565)
/*放大的X 请你编程画一个放大的'X'. Input 输入数据第一行是一个整数T,表示有T组測试数据: 接下来有T行,每行有一个正奇数n(3 <= n <= 79).表示放大的规格. O ...
- P1830 轰炸III
P1830 轰炸III 84通过 145提交 题目提供者wanglichao1121 标签模拟矩阵洛谷原创 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目背景 一个大小为N ...
- Mongo性能测试-python脚本
单线程 500+w条数据,插入时间:1小时,13分钟. 脚本: [root@10 hurl]# cat insert-mongo2.py #!/usr/bin/env python #coding=u ...
- c++编译常见错误原因集中
1 c++ compiler error c4430 "c++ doesn't support default int" 1.1 可能的原因之一 我用了在一个头文件中定义的宏,但是 ...
- 如何扩大VMware中的ubuntu虚拟机的磁盘大小
我是在VMware中安装的ubuntu. 最近虚拟机磁盘空间不够,需要扩展,在虚拟机中设置了扩展20G,然后在ubuntu中发现扩展的20G并不能用.... 正确的扩展方法是: 1.先在虚拟机中的se ...
- 利用【监听器】动态加载Log4j配置文件
转自:https://veromca273.iteye.com/blog/1889304 1 创建监听器: public class LogListener implements ServletCon ...
- java静态代理实例
package test; class ProxyTest { public static void main(String[] args) { ProxyClass proxy = new Prox ...
- JAVA基础(多线程Thread和Runnable的使用区别(转载)
转自:http://jinguo.iteye.com/blog/286772 Runnable是Thread的接口,在大多数情况下“推荐用接口的方式”生成线程,因为接口可以实现多继承,况且Runnab ...
- HDU 1847 博弈
sg[0]=0; sg[i]=mex{sg[i-2^(j)]} (i>=2^j) mex()为不在此集合的最小非负整数 #include <stdio.h> #include &l ...
- debounce还是throttle(去抖和节流)
debounce 去抖 我的理解很简单,比方说window.onscroll会疯狂触发handler,此时给它一个debounce(handler, delayTime). 就是不管你延时时间内触发了 ...