clearswitch/dragon-ball-laravel

1.2.0 2024-01-18 02:46 UTC

This package is auto-updated.

Last update: 2024-04-18 03:38:25 UTC


README

对laravel10 进行个性化的定制

安装要求

  • php >=8.0
  • Laravel >10
  • redis

优化的功能

  • 模型的命名规则

蛇形的命名规则,例如表名字order_item 定模型的时候,需要写成OrderItem

    use ClearSwitch\DragonBallLaravel\Models\AbstractMode;
    class OrderItem extends AbstractMode{
    
    }

模型都必须继承

   use ClearSwitch\DragonBallLaravel\Models\AbstractMode;
   class User extends AbstractMode
  {
  
  }

添加数据的数据的时候,如果没填写主键值,自动添加用雪花规格自动补充主键

    //当填写了主键的值,那么存储的数据主键值就是1
    $model=new OrderItem([
      "id"=>'1'
    ])
    $model->save();
    //当没有写主键的时候,主键自动已雪花的格式补充
    $model=new OrderItem([
      "sku"=>'1123443545'
    ])
    $model->save();
    //如果你想自定义,这个自动补充主键的规则你需要写如下的代码
   use Illuminate\Support\ServiceProvider;
   class SnowflakeServiceProvider extends ServiceProvider
   {
       public function register()
       {
        // 首先解除包中绑定的snowflake服务
        $this->app->forgetInstance('snowflake');
        //绑定自定义的名叫snowflake的服务,名字必须和包中的服务名字保持一直
        $this->app->singleton('snowflake', function ($app) {
            // 你自己的服务代码
            return new YourCustomSnowflakeClass();
        });
       }
   }
   //然后注册自己定义的服务
   //您可以在 `config/app.php` 文件中的 `providers` 数组中添加它:
   'providers' => [
    // ...
    App\Providers\SnowflakeServiceProvider::class,
    // ...
   ],
  • token 的验证

token 使用的openssl 加密和解密,需要定义创建一个token的配置文件

   //在app/config 的目录下增加一个dragonBallLaravel.php 的文件,配置如下
   return [
    //模型中的时间结果是否是Y-m-d H:i:s
    'formatYmdHis' => env('FORMAT_YMDHIS', false),
    //常量是否启用缓存
    'has_constant_cache' => env('HAS_CONSTANT_CACHE', true),
    //是否打印sql 
    'print_sql' => env('PRINT_SQL', false),
    //token的配置
    'token' => [
        //定义自己的加密密钥
        'tokenKey' => env("TOKEN_KEY", 'JVLNCYUupnPqgJ$x3t92$#6RMcm7F%rk'),
        //定义自己加密的时候的偏移量
        'vi' => env('TOKEN_VI', 'jSjJax*^gmZNa4r&'),
         //定义token的过期时间
        'expires' => env('EXPIRES', now()->addYear(100))
    ]

做好这些就可以在auth.php 配置文件中就可以配置叫token的驱动

  //例如
 'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,//false true
         ],

路由使用token的守卫

    Route::middleware('auth')->group(function () {});

用户认证器的模型需要调用

    use Illuminate\Contracts\Auth\Authenticatable;
    use ClearSwitch\DragonBallLaravel\Models\AbstractMode;
   class User extends AbstractMode implements  Authenticatable
  {
     
  }

获得验证通过的用户

   auth('api')->user()
  • 缓存

在cache.php 配置中增加一个驱动,这个驱动是token用的

   'token_file' => [
            'driver' => 'token_file',
            'path'=>storage_path('token'),
      ],
  • 异常提企业微信和邮箱

在config 目录中配置文件 文件名字 robot.php

   return [
    'qy_we_chat' => [
        'corpid' => '企业微信群组',
        'corpsecret' => '密钥',
        //如果批量设置接受者xxx|xxxx|xxx
        'touser'=>'接受者'
    ],
    'mail'=>[
        'username'=>'发送者的邮箱',
        'password'=>'邮箱密码',
        'sender'=>'发送者名字',
        'host'=>'邮箱服务器'
    ]
];

调用

  use  ClearSwitch\DragonBallLaravel\Traits\Robot
  class sendMessage{
       use Robot;
       public function send(){
          $this->qyWeChat("类容")
          $this->qyWeChat("EmailSend")
       }
  }
  • request

JsonRequest ,ListRequest,QueryRequest JsonRequest 对应的json请求 QueryRequest 对应的是Get的请求 ListRequest 对应的是类表请求

use ClearSwitch\DragonBallLaravel\Requests\JsonRequest;
class Login extends JsonRequest 
{
    public function rules()
    {
        return [];
    }
    public function attributes()
    {
        return [];
    }
}
//Controller
   use Login 
   public function login(Login $request)
    {
        //获得请求数据通过的数据
        $data = $request->validated(); 
    }

ListRequest 的应用

 use ClearSwitch\DragonBallLaravel\Requests\ListRequest;
   class order extends ListRequest 
  {
    public function rules()
    {
        return [];
    }
    public function attributes()
    {
        return [];
    }
}

控制器

   use ClearSwitch\DragonBallLaravel\Controllers\AbstractController;
   use ClearSwitch\DragonBallLaravel\Component\DataProvider;
   use ClearSwitch\DragonBallLaravel\Component\DataFilter;
   class order extends AbstractController{
     $filter = (new DataFilter($data))
            ->addRule('waybill', '=', 'waybill')
            ->addRule('orderId', '=', 'orderId')
            ->addRule('start_time', '>=', 'addTime')
            ->addRule('end_time', '<=', 'addTime');
        $provider = (new DataProvider($builder, $filter))
            ->setColumns(['waybill', 'orderId', 'codCurrency', 'consigneeCountry', 'addTime', 'codAmount'])
            ->addSort('addTime')
            ->setSerializer(function ($rows) {
                $result = [];
                foreach ($rows as $row) {
                    $order = $row->getAttributes();
                    $result[] = $order;
                }
                return $result;
            });
        return $this->send($provider);
   }

列表返回的格式

  {
  "code": 200,
  "data": {
    "page": 1,
    "page_size": 20,
    "last_page": 1,
    "count": 1,
    "rows": [
    ]
  },
  "message": "Success"
}
  • 日志

日志使用的 monolog

   use ClearSwitch\DragonBallLaravel\Traits\Log
   $this->log()->info();
  • 事件
  • 配置好企业微信之后直接调用异常事件
 use ClearSwitch\DragonBallLaravel\Events\ErrorWarnEvent;
 event(new ErrorWarnEvent(['message' =>"错误信息", 'code' =>"code", 'file' =>"那个文件", 'line' =>'那一行']));
  • 常量

版本大于1.1.0 增加了对常量的支持,且支持常量缓存

class OrderStatus extends AbstractConstant
{
    /**
     * @Message("等待")
     */
    const WAIT = 1;

    /**
     * @Message("发货")
     */
    const SHIP = 2;
}

启用缓存 默认不支持缓存

   HAS_CONSTANT_CACHE=true

可以使用的方法

  //获得所有常量的数组
   OrderStatus::list();
  //获得常量标签
   OrderStatus::messages();
  //获得常量的注解 get+标签名字(常量值)
   OrderStatus::getMessage(1);