ngocnm/laravel_helpers

v8.0.0 2024-08-14 04:52 UTC

README

1. 安装

composer require ngocnm/laravel_helpers

2. 在laravel中配置

  • 注册服务提供者
\Ngocnm\LaravelHelpers\providers\HelperServiceProvider::class
  • 在文件 app/Http/Kernel.php 中的 api 组中添加 middleware
protected $middlewareGroups = [
    ...,
    'api' => [
        ...,
        FilterRequestForApi::class
    ],
];
  • 要发布配置文件,请运行以下命令
php artisan vendor:publish --tag=helper_config
# Vị trí file config  config/helper.php
  • config/helper.php
<?php
return [
    'paginate' => [
        'page_max' => 30,
        'limit_max' => 100
    ],
    'backup' => [
        'enable' => env('HELPER_BACKUP_ENABLE', true),
//        'ask' => false,
        'backup_driver' => env('HELPER_BACKUP_DRIVER', 'local'),
        'mysqldump_path' => env('HELPER_MYSQLDUMP_PATH', '/usr/bin/mysqldump'),
        'zip_path' => env('HELPER_ZIP_PATH', '/usr/bin/zip'),
        'number_of_backup' => env('HELPER_NUMBER_OF_BACKUP', 5),
        'database' => [
            'folder' => env('HELPER_BACKUP_FOLDER', '/var/www/html/backup/database'),
            'description' => 'Backup database',
            'file_name' => 'database_backup.sql',
            'file_config' => env('HELPER_MYSQL_CONFIG', '/home/huyct/mysql.conf'),
            'database_name' => env('HELPER_DATABASE_NAME', 'laravel'),
            'tables' => [
                'table1',
                'table2'
            ],
        ],
    ],
    'deploy' => [
        'commands' => [
            [
                'enable' => true,
                'description' => 'Update code',
                'folder' => '/var/www/html/code/', //folder run command
                'cmd' => [
                    'git pull origin master',
                    'composer update --no-dev'
                ],
                'user' => '',//User run command (default user ssh)
                'ask' => false
            ]
        ],
        'servers' => [
            [
                'enable' => true,
                'name' => 'ai_master',
                'ip' => '127.0.0.1',
                'user_name' => 'ubuntu'
            ]
        ],
    ],
    'log' => [
        'driver' => env("HELPER_LOG_DRIVER", 'slack'),
        'enable' => env("HELPER_LOG_ENABLE", true),
        'connections' => [
            'slack' => [
                'name' => 'Send Message To Slack',
                'slack_error_url' => env("SLACK_ERROR_URL"),
                'slack_log_url'=>env("SLACK_LOG_URL"),
            ],
        ]
    ]
];
  • 配置环境变量
SLACK_ERROR_URL=
SLACK_LOG_URL=
HELPER_LOG_DRIVER=
HELPER_LOG_ENABLE=
HELPER_LOG_QUEUE_NAME=
IP_SERVER=
APP_NAME=
  • 添加到 config/app.php
    'ip_server' => env('IP_SERVER', 'localhost'),
    'app_name' => env('APP_NAME0', 'localhost'),
  • 在 model 类中配置
namespace App\Models;

class User {
    static $schema = [
        "id" => [
            "type" => "int",
            "insert" => false,
            "query_condition" => true,
            "sort" => true
        ],
        "title" => [
            "type" => "string",
            "insert" => false,
            "query_condition" => true,
            "sort" => true,
            "fulltext_search" => true
        ],
        "created_at" => [
            "type" => "string",
            "insert" => false,
            "query_condition" => false,
            "required_when_create" => false,
            "sort" => true
        ],
        "updated_at" => [
            "type" => "string",
            "insert" => false,
            "query_condition" => false,
            "required_when_create" => false,
            "sort" => true
        ]
    ];
}
  • 如果 this->app->singleton 不起作用,则添加到 Exceptions/Handler
    public function register(): void
    {
        $this->reportable(function (Throwable $e) {
            \Ngocnm\LaravelHelpers\exceptions\SendLog::SendLog($e);
        }
    }

描述

  • type:数据类型,包括:intstringdouble
  • insert:是否可以从请求参数中添加数据
  • query_condition:查询条件
  • required_when_create:创建请求时必填项
  • sort:查询 order by
  • fulltext_search:在 mysql 中使用全文搜索
  • 从请求中获取参数
Ngocnm\LaravelHelpers\Helper::BaseApiRequest()->getFields();
Ngocnm\LaravelHelpers\Helper::BaseApiRequest()->getFields();
...
  • 与模型注册
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Ngocnm\LaravelHelpers\eloquent\BaseModel; // add line

class UserLog extends Model
{
    use HasFactory,BaseModel;// add line
    protected $table = 'user_logs';
}

3. 在获取数据的方法中声明

// Filter request 
function getUserBy Api(){
    $model = UserLog::baseQueryBuilder(UserLog::class);//add line
    ...
    return $model->get();
}

4. 从api获取数据的参数

  • selectfields=field_1,field_2,field_3,...
  • wherewhere=field_1+condition_1,field_2+condition_2,...
  • where_lesswhere=field_1+condition_1,field_2+condition_2,...
  • where_thanwhere=field_1+condition_1,field_2+condition_2,...
  • where_notwhere_not=field_1+condition_1,field_2+condition_2,...
  • where_inwhere_in=field_1+condition_1,field_2+condition_2,... 或者 where_in[]=field_1+condition_1,field_2+condition_2&where_in[]=field_2+condition_3,field_3+condition_4
  • limitlimit=30(默认为30)
  • pagepage=1(默认为1)
  • offsetoffset=30(默认将从 limitpage 参数计算)
  • order_byorder_by=field_1+desc,field_2+asc,...
  • field_searchfield_search=column_search(搜索字段,与 field_search 一起使用)
  • keywordkeyword=something(搜索关键字,与 keyword 一起使用)
  • withwith=relashtionship_1+field_1,field_2-relashtionship_2+field_1,field_2

注意:要使用 with 参数,需要在 Model 类中声明关系

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Ngocnm\LaravelHelpers\eloquent\BaseModel;

class UserLog extends Model
{
    use HasFactory,BaseModel;
    protected $table = 'user_logs';
    
    const relationship_device_fields = ['id','name','ip']; // add line
    
    public function device(){ // add function
        return $this->belongsTo(Device::class,  'device_id','id');
    }
}

5. 自定义

  • 自定义配置 limit_maxpage_max
Ngocnm\LaravelHelpers\Helper::BaseApiRequest()->setLimitMax(100);
Ngocnm\LaravelHelpers\Helper::BaseApiRequest()->setPageMax(100);

6. 自动从多个服务器拉取代码并运行命令

  • 在文件 config/helper.php 中配置 deploy 参数
  • server masterserver cluster 之间添加远程 ssh key
php artisan helper:deploy-app

7. 为api记录查询

  • 配置 env
HELPER_QUERY_LOG=true
  • 添加 api 中间件
protected $middlewareGroups = [
    ...,
    'api' => [
        ...,
        LogQueryForApi::class
    ],
];
  • API 响应将包括 log_query 参数
{
  "data": {},
  "query_log": {}
}

8. 为服务器配置发送消息到 Slack 的作业

  • 配置 supervisor
cd /etc/supervisor/conf.d
vim send-log.conf
  • 复制配置段
[program:send-log]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /path/to/artisan queue:work --queue=send-log --sleep=3  --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=eztech
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/supervisor/send-log.log
stopwaitsecs=3600

9. 配置数据库备份命令

  • 在服务器上配置 mysql 的 secret
cd /home/ubuntu/
touch mysql.conf

[client]
user=root
password=Test@123456
  • 创建备份文件夹
cd /var/www/html/
mkdir backup
cd backup
mkdir database
  • 为备份命令配置 .env
HELPER_BACKUP_ENABLE=true
HELPER_BACKUP_DRIVER=local
HELPER_MYSQLDUMP_PATH=/usr/bin/mysqldump
HELPER_ZIP_PATH=/usr/bin/zip
HELPER_NUMBER_OF_BACKUP=5
HELPER_BACKUP_FOLDER=/var/www/html/backup/database
HELPER_MYSQL_CONFIG=/home/ubuntu/mysql.conf
HELPER_DATABASE_NAME=laravel
  • 数据库备份命令
php artisan helper:backup-database