PHP

[laravel]自定义辅助函数

是滑稽啊
2022-07-07 / 0 评论 / 188 阅读 / 正在检测是否收录...

[TOC]

前言

laravel自带的助手函数使用方便。

虽然laravel自带的助手有很多,
有的时候也需要自定义那么就需要我们来手动创建

比如说接口中常用的方法: 成功返回success(),失败返回failed()

经常会使用所以必要的需要封装起来,放在一个起统一管理,

前言就几句话还得写的语无伦次,笑了 表情

创建助手类

vim /Helpers/function.php

封装

<?php

/**
 * @param int $code 返回码
 * @param string $message 返回说明
 * @param array $data 成功时返回数据
 * @param array $errors 失败时返回数据
 * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
 */
function responseApi(int $code, string $message, array $data = [], array $errors = [])
{
    return response(compact('code', 'message', 'data', 'errors'));
}

/**
 * @param array $data 返回数据
 * @param string $message 说明
 * @param int $code 返回码
 * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
 */
function success(array $data = [], string $message = 'OK', int $code = 0)
{
    $code = $code == 0 ? $code : -1;

    return responseApi($code, $message, $data, []);
}

/*
function successWithToken(string $token, string $message = '', array $data = [])
{
    if ($token && !\Illuminate\Support\Str::startsWith($token, 'Bearer ')) {
        $token = 'Bearer ' . $token;
    }

    return success($data, $message)->header(config('auth.token_key'), $token);
}*/

/**
 * @param string $message 说明
 * @param int $code 返回码
 * @param array $errors 失败时返回数据
 * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
 */
function failed(string $message = 'Failed', int $code = -1, array $errors = [])
{
    $code = $code == 0 ? -1 : $code;

    return responseApi($code, $message, [], $errors);
}

/**
 * @param string $failMessage 说明
 * @param int $statusCode 回状态码
 * @param array $errors 错误数据
 * @param int $code 返回代码
 * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
 */
function failedWithStatusCode(string $failMessage = 'Failed', int $statusCode = -1, array $errors = [], int $code = -1)
{
    $statusCode = $statusCode > 400 ? $statusCode : 400;

    return response(['code' => $code, 'message' => $failMessage, 'data' => [], 'errors' => $errors], $statusCode);
}

/**
 * 生成随机字符串(纯字母)
 *
 * @param int $length
 * @return string
 */
function random_str(int $length): string
{
    return random_in_str("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", $length);
}

/**
 * 生成随机字符串(纯大写字母)
 *
 * @param integer $length
 * @return string
 */
function random_str_up(int $length): string
{
    return random_in_str("ABCDEFGHIJKLMNOPQRSTUVWXYZ", $length);
}

/**
 * 生成随机字符串(纯数字)
 *
 * @param int $length
 * @return string
 */
function random_number(int $length): string
{
    return random_in_str("0123456789", $length);
}

/**
 * 在字符串中随机取字符组成长度为length的字符串
 *
 * @param string $str
 * @param integer $length
 * @return string
 */
function random_in_str(string $str, int $length): string
{
    while (strlen($str) < $length) {
        $str .= str_shuffle($str);
    }

    return substr(str_shuffle($str), mt_rand(0, strlen($str) - $length), $length);
}

自动引用

如果想让项目可以随时用助手那需要在配置下加载

有两种方式。

方法一:

在composer.json中 添加 autoload中增加"files":["app/Helpers/function.php"]

"autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
        "files": [
            "app/Helpers/function.php"
          ]
    },

最后在项目根目录中更新下composer

composer dumpautoload

方法二:

使用框架自己引导加载

bootstrap/app.php 中增加

require __DIR__ . '/../app/Helpers/function.php';

测试

最后在随便一个类中可以测试一下

return success();
0

评论

博主关闭了所有页面的评论