ngocnm / laravel_helpers
LaravelHelper
v8.0.0
2024-08-14 04:52 UTC
Requires
- php: ^7.3|^8.0
- ext-json: *
- guzzlehttp/guzzle: ^7.2
- laravel/framework: ^8.75|^9.0.0|^10.0.0|^11.0.0
This package is auto-updated.
Last update: 2024-09-14 05:14:01 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
:数据类型,包括:int
,string
,double
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获取数据的参数
select
:fields=field_1,field_2,field_3,...
where
:where=field_1+condition_1,field_2+condition_2,...
where_less
:where=field_1+condition_1,field_2+condition_2,...
where_than
:where=field_1+condition_1,field_2+condition_2,...
where_not
:where_not=field_1+condition_1,field_2+condition_2,...
where_in
:where_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
limit
:limit=30
(默认为30)page
:page=1
(默认为1)offset
:offset=30
(默认将从limit
和page
参数计算)order_by
:order_by=field_1+desc,field_2+asc,...
field_search
:field_search=column_search
(搜索字段,与field_search
一起使用)keyword
:keyword=something
(搜索关键字,与keyword
一起使用)with
:with=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_max
和page_max
Ngocnm\LaravelHelpers\Helper::BaseApiRequest()->setLimitMax(100); Ngocnm\LaravelHelpers\Helper::BaseApiRequest()->setPageMax(100);
6. 自动从多个服务器拉取代码并运行命令
- 在文件
config/helper.php
中配置deploy
参数 - 在
server master
和server 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