定制 andre1502/net_utilities 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

andre1502/net_utilities

最新稳定版本:0.3.3

Composer 安装命令:

composer require andre1502/net_utilities

包简介

Library to combine common function

README 文档

README

Packagist Version

Library to help faster initialization Laravel project which include common functions, lang, exceptions, middleware, and routes.

Installation

Run this script from command line inside project folder

composer require andre1502/net_utilities
composer install

Package will do auto publish for Lang data, to publish package config you can run this script from command line inside project folder

php artisan net-utilities:publish

Most of the config data can be overriden from project .env.

Config value

<?php

return [
  "log_channel" => env("NET_UTILITIES_HTTP_REQUEST_LOG_CHANNEL", "RequestAPI"),
  "timeout" => env("NET_UTILITIES_HTTP_REQUEST_TIMEOUT", 60),
  "retry" => env("NET_UTILITIES_HTTP_REQUEST_RETRY_COUNT", 3),
  "retry_interval_ms" => env("NET_UTILITIES_HTTP_REQUEST_RETRY_INTERVAL_MS", 300),
  "timezone" => env("NET_UTILITIES_TIMEZONE", env("TIME_ZONE", "UTC")),
  "locale" => env("NET_UTILITIES_LOCALE", "en-US"),
  "date_format" => env("NET_UTILITIES_DATE_FORMAT", "Y-m-d"),
  "datetime_format" => env("NET_UTILITIES_DATETIME_FORMAT", "Y-m-d H:i:s"),
  "duration_format" => env("NET_UTILITIES_DURATION_FORMAT", "%H:%I:%S"),
  "decimal_precision" => env("NET_UTILITIES_DECIMAL_PRECISION", env("DECIMAL_PRECISION", 2)),
  "monthly_limit" => env("NET_UTILITIES_MONTHLY_LIMIT", env("MONTHLY_LIMIT", 6)),
  "db_trans_retry" => env("NET_UTILITIES_DB_TRANS_RETRY", env("DB_TRANS_RETRY", 5)),
  "page_size" => env("NET_UTILITIES_PAGE_SIZE", env("PAGE_SIZE", 20)),
  "apis" => [
    "check_jwt" => sprintf("%s/%s", env("NET_UTILITIES_CHECK_JWT_API_URL", ""), env("NET_UTILITIES_CHECK_JWT_API_PATH", "")),
  ],
  "internal_api_auth" => [
    "header" => env("NET_UTILITIES_INTERNAL_API_HEADER", env("INTERNAL_API_HEADER", "")),
    "token" => env("NET_UTILITIES_INTERNAL_API_TOKEN", env("INTERNAL_API_TOKEN", "")),
  ],
  "basic_auth" => [
    "username" => env("NET_UTILITIES_DASHBOARD_BASIC_AUTH_USERNAME", env("DASHBOARD_BASIC_AUTH_USERNAME", "admin")),
    "password" => env("NET_UTILITIES_DASHBOARD_BASIC_AUTH_PASSWORD", env("DASHBOARD_BASIC_AUTH_PASSWORD", "123456")),
    "allowed_ip" => env("NET_UTILITIES_DASHBOARD_ALLOWED_IP", env("DASHBOARD_ALLOWED_IP", "127.0.0.1")),
  ],
  "jwt_auth" => [
    "default" => [
      "secret" => env("NET_UTILITIES_JWT_SECRET", env("JWT_SECRET", "")),
      "ttl" => env("NET_UTILITIES_JWT_TTL", env("JWT_TTL", 20160)), // in minutes
    ],
    "check_jwt" => [
      "secret" => env("NET_UTILITIES_CHECK_JWT_SECRET", env("JWT_SECRET", "")),
    ],
  ],
  "redis_keys" => [
    "check_jwt" => "jwt_token:[user]",
  ],
  "redis" => [
    "check_jwt_redis" => [
      "name" => env("NET_UTILITIES_CHECK_JWT_REDIS", "check_jwt_redis"),
      "databases" => [
        "default" => env("NET_UTILITIES_CHECK_JWT_REDIS_DATABASE_DEFAULT", 0),
        "cache" => env("NET_UTILITIES_CHECK_JWT_REDIS_DATABASE_CACHE", 1),
      ],
      "queue_setting" => [
        "enabled" => env("NET_UTILITIES_CHECK_JWT_REDIS_QUEUE_ENABLED", false),
        "queue" => env("NET_UTILITIES_CHECK_JWT_REDIS_QUEUE", "default"),
        "retry_after" => env("NET_UTILITIES_CHECK_JWT_REDIS_QUEUE_RETRY_AFTER", 90),
        "block_for" => env("NET_UTILITIES_CHECK_JWT_REDIS_QUEUE_BLOCK_FOR", null),
        "after_commit" => env("NET_UTILITIES_CHECK_JWT_REDIS_QUEUE_AFTER_COMMIT", false),
      ],
      "client" => env("NET_UTILITIES_CHECK_JWT_REDIS_CLIENT", "phpredis"),
      "cluster" => env("NET_UTILITIES_CHECK_JWT_REDIS_CLUSTER", false),
      "url" => env("NET_UTILITIES_CHECK_JWT_REDIS_URL", ""),
      "host" => env("NET_UTILITIES_CHECK_JWT_REDIS_HOST", "127.0.0.1"),
      "username" => env("NET_UTILITIES_CHECK_JWT_REDIS_USERNAME", ""),
      "password" => env("NET_UTILITIES_CHECK_JWT_REDIS_PASSWORD", ""),
      "port" => env("NET_UTILITIES_CHECK_JWT_REDIS_PORT", "6379"),
      "persistent" => env("NET_UTILITIES_CHECK_JWT_REDIS_PERSISTENT", false), // Enable persistent connection
      "options" => [
        "cluster" => env("NET_UTILITIES_CHECK_JWT_REDIS_CLUSTER", "redis"),
        "prefix" => env("NET_UTILITIES_CHECK_JWT_REDIS_PREFIX", "jwt_redis:"),
      ],
    ],
  ],
];

JWT

To generate jwt key:

php artisan net-utilities:jwt-key

To generate jwt key and overwrite existing:

php artisan net-utilities:jwt-key --force

To display current jwt key:

php artisan net-utilities:jwt-key --show

Usage

Functions

Functions are added as Traits for easy to use (without needed to add dependency injection inside constructor).

Consists of:

  • ConfigTrait
  • UtilsTrait
  • HttpRequestTrait
  • Commands Trait:
    • PrependsEnvironmentTrait
    • PrependsOutputTrait
    • PrependsTimestampTrait

Commands Trait are useful to include inside Laravel Console Commands to make logging more richer.

You can use Traits directly inside Laravel class, e.g.:

...

use Andre1502\NetUtilities\Traits\Config;

...

class TestCall extends Command
{
  use Config;

  ...

  public function handle()
  {
    $this->info("configName: {$this->configName}");
  }
}

Lang

Inside Laravel package also possible to include locales translation files which can be used inside package or Laravel project itself.

To access this translation:

...

use Andre1502\NetUtilities\Traits\Config;

...

class TestCall extends Command
{
  use Config;

  ...

  public function handle()
  {
    $this->info(__("{$this->configName}::remark.SUCCESS"));
  }
}

Exceptions

Exceptions are used to write log and shape the error output to user. Better to also include Response from Symfony to use standard Http Status code.

public function __construct(
  int $httpStatus, // API http status
  ?string $errorCode, // error code which follow translation key
  array $args = [], // additional data when write to log.
  array $params = [], // to include data inside translation key (refer to $errorCode).
  ?string $logChannel = null // to write into different log channel.
)
...

use Symfony\Component\HttpFoundation\Response;
use Andre1502\NetUtilities\Exceptions\APIErrorException;

...

class Testing
{
  ...

  public function tester() : void
  {
    throw new APIErrorException(Response::HTTP_BAD_REQUEST, "example error");
  }
}

Middleware

Package will automatically iclude common middleware which need to have,

  • APICheckJWT
  • APICheckAuthToken
  • APIResponseFormat
  • DashboardBasicAuth

APICheckJWT && RedisCheckJWT

This middleware are used to authenticate user JWT to centralized API, it will return user data.

Package will automatically register to middleware kernel as apiCheckJwt and redisCheckJwt.

You can use it inside route api:

...

use Illuminate\Support\Facades\Route;

...

Route::post('/test', 'testApi')->middleware("apiCheckJwt")->name('test');
Route::post('/test1', 'testApi')->middleware("redisCheckJwt")->name('test1');

...

You also need to setup .env file for this key:

NET_UTILITIES_CHECK_JWT_API_URL=
NET_UTILITIES_CHECK_JWT_API_PATH=

APICheckAuthToken

This middleware are used to authenticate internal API call.

Package will automatically register to middleware kernel as apiCheckAuthToken.

You can use it inside route api:

...

use Illuminate\Support\Facades\Route;

...

Route::post('test', 'testApi')->middleware("apiCheckAuthToken")->name('test');

...

APIResponseFormat

This middleware are used to custom format API response globaly.

Package will automatically register to middleware kernel group for api.

DashboardBasicAuth

This middleware are used to create basic authentication to access package dashboard with authentication.

Package will automatically register to middleware kernel as dashboardBasicAuth.

You also need to setup .env file for this key:

NET_UTILITIES_DASHBOARD_BASIC_AUTH_USERNAME=
NET_UTILITIES_DASHBOARD_BASIC_AUTH_PASSWORD=
NET_UTILITIES_DASHBOARD_ALLOWED_IP=

or

DASHBOARD_BASIC_AUTH_USERNAME=
DASHBOARD_BASIC_AUTH_PASSWORD=
DASHBOARD_ALLOWED_IP=

Allowed IP also support more than one IP, you can separate it with comma, e.g.:

DASHBOARD_ALLOWED_IP=127.0.0.1,192.168.1.1

Routes

System will register common route for check whether project has been deployed correctly (health-check) and console route to help clean log remotely.

Package also automatically register the routes, so no additional action need to do.

💖 Support the Project

If this project saved you time or helped you build something cool, consider a one-time donation!

Liberapay One-Time

Amount Goal
$5 USD ☕ Buy me a coffee
$15 USD 🍕 Buy me a pizza
$50 USD 🛠️ Support a new feature
Custom 🚀 Every bit helps!

Note: 100% of your donation goes to development (excluding PayPal's standard transaction fee).

统计信息

  • 总下载量: 3
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-09-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固