前言

以往写过俩篇文章
[积德篇] 如何少写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


  1. 'providers' => [
  2. // [...]
  3. CrazyCodes\ActionServiceProvider::class,
  4. ],

注册 Action facade:


  1. 'aliases' => [
  2. // [...]
  3. 'Action' => CrazyCodes\Facades\Action::class,
  4. ],

发布配置文件


  1. php artisan vendor:publish --provider=CrazyCodes\ActionServiceProvider

配置项就一个


  1. actionNamespace //设置你的action所在的命名空间

使用

继承Action方法获取规范的命名


  1. namespace CrazyCodes\Action;
  2. class CreateUser extends Action
  3. {
  4. }

继承的Action准备了两个方法

before


  1. public function before($request)
  2. {
  3. return $request;
  4. }

Action被调用的同时会直接调用before方法执行。

after


  1. public function after($request)
  2. {
  3. return [];
  4. }

可以选择不声明after方法。after主要用于调用其他Action

成员变量


  1. public $beforeResultName = 'beforeResult';
  2. public $afterResultName = 'afterResult';

用于获取返回的结果

调用

可以通过Facade调用


  1. Action::use('YourAction',发送的参数);

或者使用全局函数


  1. laravel_action('YourAction',发送的参数);

获取结果

得到的结果默认是对象。可以转换格式


  1. function toJson();
  2. function toArray();

结果展示

Array


  1. array:2 [
  2. "beforeResult" => array:1 [
  3. 0 => "aaa"
  4. ]
  5. "afterResult" => []
  6. ]

JSON


  1. {"beforeResult":["aaa"],"afterResult":[]}

Demo

依旧以创建用户为例

UserController


  1. <?php
  2. namespace Examples;
  3. use CrazyCodes\Facades\Action;
  4. /**
  5. * Class UserController
  6. * @package Examples
  7. */
  8. class UserController
  9. {
  10. public function create()
  11. {
  12. $request = [
  13. 'username' => 'test',
  14. 'password' => 'test',
  15. ];
  16. $result = Action::use ('CreateUser', $request);
  17. //全局方法
  18. //laravel_action ('CreateUser', $request);
  19. // return $result->toArray();
  20. return $result->toJson ();
  21. }
  22. }

CreateUser


  1. <?php
  2. namespace Examples;
  3. use CrazyCodes\Action;
  4. /**
  5. * Class CreateUser
  6. * 创建用户
  7. * @package Examples
  8. */
  9. class CreateUser extends Action
  10. {
  11. public function before($request)
  12. {
  13. var_dump ($request);
  14. return ['status' => 'success'];
  15. }
  16. public function after($request)
  17. {
  18. var_dump ($request);
  19. return Action::use ('CreateWallet', $request);
  20. }
  21. }

CreateWallet


  1. <?php
  2. namespace Examples;
  3. use CrazyCodes\Action;
  4. /**
  5. * 创建用户钱包
  6. * Class CreateWallet
  7. * @package Examples
  8. */
  9. class CreateWallet extends Action
  10. {
  11. public function before($request)
  12. {
  13. var_dump ($request);
  14. return ['status' => 'success'];
  15. }
  16. }

致谢

感谢你看到这里,希望这篇文章让你的代码更优雅。谢谢

原文地址:https://segmentfault.com/a/1190000016052574

Laravel-Action 对代码的改造的更多相关文章

  1. Windows Live Writer 代码插件改造

    源码和插件都在后面,如果不想看我神神叨叨的可以直接到文章后面下载 一 .找插件 在使用Windows Live Writer 经常要用到插入代码的功能,根据博客园中教程,分别使用了: WindowsL ...

  2. 【转】Windows Live Writer 代码插件改造

    源码和插件都在后面,如果不想看我神神叨叨的可以直接到文章后面下载 一 .找插件 在使用Windows Live Writer 经常要用到插入代码的功能,根据博客园中教程,分别使用了: WindowsL ...

  3. laravel前台html代码不显示

    后天向前台传输变量,如果能取到变量数据,还有代码,但是不显示图片 可以把{{}}换成{!!     !!}试试.

  4. laravel phpstorm IDE 代码提示

    第一步:在项目的composer.json中添加如下一行 "require": { "laravel/framework": "5.0.*" ...

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

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

  6. 委托代码func和Action的基本用法

    这是微软简化后的委托写法,其中,func适合带返回参数的方法调用,action适合没有返回参数的方法调用 FUNC方法代码: public string GetPeopleInfo(string na ...

  7. laravel代码规范强制检查

    目录 介绍 代码规范检查与修复 在git commit时自动检查代码规范 后记 介绍 在团队协作开发中,代码规范是必要的.以前的规范都是自己定,然后手动检查,很难做到有效的约束. 现代的PHP,则有得 ...

  8. 使用dva改造旧项目的数据流方案

     前言 最近在给自己的脚手架项目转到TypeScript时,遇到了一些麻烦. 项目之前采用的是react + react-redux + redux-thunk + redux-actions +re ...

  9. 第十四节:Asp.Net Core 中的跨域解决方案(Cors、jsonp改造、chrome配置)

    一. 整体说明 1. 说在前面的话 早在前面的章节中,就详细介绍了.Net FrameWork版本下MVC和WebApi的跨域解决方案,详见:https://www.cnblogs.com/yaope ...

随机推荐

  1. 放大的X(杭电2565)

    /*放大的X 请你编程画一个放大的'X'. Input 输入数据第一行是一个整数T,表示有T组測试数据: 接下来有T行,每行有一个正奇数n(3 <= n <= 79).表示放大的规格. O ...

  2. P1830 轰炸III

    P1830 轰炸III 84通过 145提交 题目提供者wanglichao1121 标签模拟矩阵洛谷原创 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目背景 一个大小为N ...

  3. Mongo性能测试-python脚本

    单线程 500+w条数据,插入时间:1小时,13分钟. 脚本: [root@10 hurl]# cat insert-mongo2.py #!/usr/bin/env python #coding=u ...

  4. c++编译常见错误原因集中

    1 c++ compiler error c4430 "c++ doesn't support default int" 1.1 可能的原因之一 我用了在一个头文件中定义的宏,但是 ...

  5. 如何扩大VMware中的ubuntu虚拟机的磁盘大小

    我是在VMware中安装的ubuntu. 最近虚拟机磁盘空间不够,需要扩展,在虚拟机中设置了扩展20G,然后在ubuntu中发现扩展的20G并不能用.... 正确的扩展方法是: 1.先在虚拟机中的se ...

  6. 利用【监听器】动态加载Log4j配置文件

    转自:https://veromca273.iteye.com/blog/1889304 1 创建监听器: public class LogListener implements ServletCon ...

  7. java静态代理实例

    package test; class ProxyTest { public static void main(String[] args) { ProxyClass proxy = new Prox ...

  8. JAVA基础(多线程Thread和Runnable的使用区别(转载)

    转自:http://jinguo.iteye.com/blog/286772 Runnable是Thread的接口,在大多数情况下“推荐用接口的方式”生成线程,因为接口可以实现多继承,况且Runnab ...

  9. HDU 1847 博弈

    sg[0]=0; sg[i]=mex{sg[i-2^(j)]}  (i>=2^j) mex()为不在此集合的最小非负整数 #include <stdio.h> #include &l ...

  10. debounce还是throttle(去抖和节流)

    debounce 去抖 我的理解很简单,比方说window.onscroll会疯狂触发handler,此时给它一个debounce(handler, delayTime). 就是不管你延时时间内触发了 ...