2022-01-14 Laravel 利用 macro 方法来扩展Request

随便找个地方写个扩展类
我的是在 App\Service;下面写的

<?php
/**
 * Request 的扩展
 * User: 李明
 * Date: 2021-12-9
 * Time: 11:39
 */
namespace App\Service;

class ApiRequest
{
    /**
     * 获取请求的数据
     * @return \Closure
     */
    public function more()
    {
        /**
         * @param array $params
         * @param bool $suffix 是否用索引数组格式
         * @return array
         */
        return function (array $params, bool $suffix = false): array {
            $p = [];
            $i = 0;
            foreach ($params as $param) {
                if (!is_array($param)) {
                    $p[$suffix == true ? $i++ : $param] = $this->input($param);
                } else {
                    if (!isset($param[1])) $param[1] = null;
                    if (!isset($param[2])) $param[2] = '';
                    if (is_array($param[0])) {
                        $name = is_array($param[1]) ? $param[0][0] . '/a' : $param[0][0] . '/' . $param[0][1];
                        $keyName = $param[0][0];
                    } else {
                        $name = is_array($param[1]) ? $param[0] . '/a' : $param[0];
                        $keyName = $param[0];
                    }
                    $p[$suffix == true ? $i++ : (isset($param[3]) ? $param[3] : $keyName)] = $this->input($name, $param[1], $param[2]);
                }
            }
            return $p;
        };
    }

    /**
     * 获取get参数
     * @return \Closure
     */
    public function getMore()
    {
        return function (array $params, bool $suffix = false): array {
            return $this->more($params, $suffix);
        };
    }

    /**
     * 获取post参数
     * @return \Closure
     */
    public function postMore()
    {
        return function (array $params, bool $suffix = false): array {
            return $this->more($params, $suffix);
        };

    }

    /**
     * 获取用户访问端
     * @return array|string|null
     */
    public function getFromType()
    {
        return function () {
            return $this->header('Form-type', '');
        };
    }

    /**
     * 当前访问端
     * @return \Closure
     */
    public function isTerminal()
    {
        return function (string $terminal) {
            return strtolower($this->getFromType()) === $terminal;
        };
    }

    /**
     * 是否是H5端
     * @return \Closure
     */
    public function isH5()
    {
        return function () {
            return $this->isTerminal('h5');
        };
    }

    /**
     * 是否是微信端
     * @return \Closure
     */
    public function isWechat()
    {
        return function () {
            return $this->isTerminal('wechat');
        };
    }

    /**
     * 是否是小程序端
     * @return \Closure
     */
    public function isRoutine()
    {
        return function () {
            return $this->isTerminal('routine');
        };
    }

    /**
     * 是否是app端
     * @return \Closure
     */
    public function isApp()
    {
        return function () {
            return $this->isTerminal('app');
        };
    }

    /**
     * 是否是app端
     * @return \Closure
     */
    public function isPc()
    {
        return function () {
            return $this->isTerminal('pc');
        };
    }

}

2,找到App\Providers,中的AppServiceProvider 文件 ,在boot中注入

    public function boot()
    {
        /**
         * 扩展 Request 方法
         */
        Request::mixin(new ApiRequest());

    }

直接在controller使用

    public function test(Request $request){

        $data = $request->getMore([
            ['id', ''],
            ['ddd', ''],
        ]);
        dd($data);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 先说几句废话,调和气氛。事情的起由来自客户需求频繁变更,伟大的师傅决定横刀立马的改革使用新的框架(created ...
    wsdadan阅读 8,229评论 0 12
  • Laravel框架一:原理机制篇 Laravel作为在国内国外都颇为流行的PHP框架,风格优雅,其拥有自己的一些特...
    Mr_Z_Heng阅读 9,171评论 0 13
  • 概述 Laravel 是一个非常流行的 PHP 框架,我们可以使用它快速构建一个 WEB 应用程序。而现在 WEB...
    yinfuyuan阅读 5,447评论 0 2
  • 过去做事情急,什么东西拿起来就用,不喜欢进行系统性的学习,造成在使用过程中的错误和低效,现在感觉自己耐心多了,用之...
    马文Marvin阅读 6,104评论 0 10
  • 1.在网上看了几篇关于laravel下面进行共享数据的方法,感觉讲的不是很容易让人理解,所以亲自整理一下,给需要的...
    Mr丘山阅读 4,003评论 0 0