# admin_laravel10
**Repository Path**: chenlvqing/admin_laravel10
## Basic Information
- **Project Name**: admin_laravel10
- **Description**: PHP laravel10 + VUE vben-vue 写的管理后台基于权限认证骨架
- **Primary Language**: PHP
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-12-04
- **Last Updated**: 2023-12-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

## 启动laravel [Laravel Sail](https://learnku.com/docs/laravel/8.5/sail/10428)
1. 进入项目根目录执行下面命令
```bash
./vendor/bin/sail up
```
## composer.json 添加引入的文件或包
1. 引入自定义帮助函数 app/Helpers/function.php
- app目录下创建Helpers目录并在Helpers目录下创建function.php
- composer.jon 文件里找到autoload.files添加自动加载
```json
{
"autoload": {
"files": [
"app/Helpers/function.php"
]
}
}
```
- 添加完成后执行以下命令,完成自动加载
```bash
composer dump-autoload
```
2. 安装包
```shell
# 安装php-jwt
composer require firebase/php-jwt
# 安装telegram-bot-sdk
composer require irazasyed/telegram-bot-sdk
# 安装验证码
composer require mews/captcha
```
3. 安装包安装完成后,生成对应的配置文件
```shell
php artisan vendor:publish
```
4. 引入 lgvpay 包
- 在项目根目录下创建 libs, 并添加要引入的 lgvpay 包
- composer.jon 文件里找到autoload.psr-4添加自动加载
```json
{
"autoload": {
"psr-4": {
"Lgvpay\\Api\\Client\\": "libs/lgvpay/api-client/src/"
}
}
}
```
- 添加完成后执行以下命令,完成自动加载
```bash
composer dump-autoload
```
- 配置自动加载服务
config/app.php 配置 providers
```php
'providers' => [
Lgvpay\Api\Client\ApiProvider::class, //添加 Lgvpay
]
```
## logger 日志
App\Logging\Logger 日志类
1. 系统日志(默认通道)
2. DB sql日志(sqlLog通道) 需要配置 config/logging.php 配置sqlLog 通道 记录sql日志, .env文件 DB_LOG 控制是否记录日志
3. DEV日志(devLog通道) config/logging.php 配置devLog 通道 开发人员专用日志通道
4. 网关日志(gatewayLog通道)记录请求日志
5. 配置 config/logging.php
```php
'channels' => [
// sql日志
'sqlLog' => [
'driver' => 'daily',
'tap' => [App\Logging\CustomizeFormatter::class], // 自定义日志格式解析类
'path' => storage_path('logs/sql-log.log'),
'level' => env('LOG_LEVEL', 'info'),
'days' => 10,
],
// 开发调试日志
'devLog' => [
'driver' => 'daily',
'tap' => [App\Logging\CustomizeFormatter::class], // 自定义日志格式解析类
'path' => storage_path('logs/dev-log.log'),
'level' => env('LOG_LEVEL', 'debug'),
'formatter_with' => [
'dateFormat' => 'Y-m-d H:i:s.u',
],
'days' => 30,
],
// 网关日志
'gatewayLog' => [
'driver' => 'daily',
'tap' => [App\Logging\CustomizeFormatter::class], // 自定义日志格式解析类
'path' => storage_path('logs/gateway-log.log'),
'level' => env('LOG_LEVEL', 'debug'),
'formatter_with' => [
'dateFormat' => 'Y-m-d H:i:s.u',
],
'days' => 30,
],
],
```
6. 日志上下文消息, 详细参考(App\Http\Middleware\AssignRequestId) 中间件
`app/Http/Kernel.php` 文件中为中间件分配一个键, 项目使用api, 在api下面配置
```php
protected $middlewareGroups = [
'web' => [
// \App\Http\Middleware\AssignRequestId::class, //日志添加 request_id
],
'api' => [
\App\Http\Middleware\AssignRequestId::class, //日志添加 request_id
],
];
```
7. DB日志监控
- 添加以下代码到 App\Providers\AppServiceProvider::boot 方法中, 并配置.env DB_LOG 参数
```php
//sql 日志
try {
if (Env::get('DB_LOG') == true) {
DB::listen(function ($query) {
$sql = $query->sql;
foreach ($query->bindings as $key => $value) {
if ($value instanceof \DateTime) {
$value = $value->format('Y-m-d H:i:s');
}
$rkey = is_numeric($key) ? '?' : ':' . $key;
$sql = Str::replaceFirst($rkey, "'{$value}'", $sql);
}
if ($query->time > 2000) { //添加慢日志
Logger::warning(LogChannel::SQL, sprintf('[%s] %s', $query->time, $sql));
return;
}
Logger::info(LogChannel::SQL, sprintf('[%s] %s', $query->time, $sql));
});
}
} catch (\Exception $e) {
Logger::error(LogChannel::DEFAULT,'sql log 写入失败', [], $e);
}
```
8. Logger 使用示例
```tex
* ----------------------------------------
* 使用示例:
* 这里只定义了 error、 warning、notice、 info、 debug 函数
* 其它未定义的日志函数通过 __callStatic 函数调用 laravel log 函数
* 支持 emergency、 alert、 critical、 error、 warning、 notice、 info、 debug
* warning 及其之上的日志级别支持第四个参数: 实现Throwable接口的异常对象
*
* ----------------------------------------
* 示例1: Logger::debug(LogChannel::DEFAULT, '{{name}}正在{{doing}}', ['name' => '小明', 'doing'=>'玩游戏']);
* ----------------------------------------
* 示例2: Logger::info(LogChannel::DEV, '{{0}}正在{{1}}', ['小明', '读书']);
* ----------------------------------------
* 示例3: Logger::critical(LogChannel::DEV, '{{0}}正在{{1}}', ['小明', '读书']);
```
9. 发送异步消息
1. ### 配置消息队列驱动
```sh
-- queue参数:
-- ⇂ queue:batches-table
-- ⇂ queue:clear
-- ⇂ queue:failed
-- ⇂ queue:failed-table
-- ⇂ queue:flush
-- ⇂ queue:forget
-- ⇂ queue:listen
-- ⇂ queue:monitor
-- ⇂ queue:prune-batches
-- ⇂ queue:prune-failed
-- ⇂ queue:restart
-- ⇂ queue:retry
-- ⇂ queue:retry-batch
-- ⇂ queue:table
-- ⇂ queue:work
php artisan queue:table
-- 使用redis 跳过
php artisan migrate
```
2. 配置 .env 将消息队列驱动配置为 `database`
```ini
QUEUE_CONNECTION=database
```
3. 启动消息队列应用进程
```
-- 运行队列
php artisan queue:work
-- 本地开发可以使用
php artisan queue:listen
-- 指定连接 & 队列
php artisan queue:work redis --queue=emails
-- 进程睡眠时间
php artisan queue:work --sleep=3
-- 队列优先级
php artisan queue:work --queue=high,low
-- queue:restart 命令优雅地重新启动所有进程
php artisan queue:restart
```
如果系统很繁忙,一个队列处理进程忙不过来,可以启动多个进程并行处理,以便充分利用系统资源(多核 CPU),加快队列处理速度
4. 创建消息队列文件实现异步
```sh
-- php artisan make:job 文件名
php artisan make:job SendVerificationMessage
```
```php
user=$user;
$this->mail=$mail;
}
/**
* Execute the job.
*/
public function handle(): void
{
Mail::to($this->user)->send($this->mail);
}
}
```
5. 调用示例
```php
SendVerificationMessage::dispatch($user, $mail);
```
6. 文档参考:https://laravelacademy.org/books/laravel-queue-action
10. Laravel 命令参考
```
php artisan cache:clear:清除应用程序缓存
php artisan command:make 命令名:在 app/commands 目录下生成一个名为 命令名.php 的自定义命令文件
php artisan controller:make 控制器名:在 app/controllers 目录下生成一个名为 控制器名.php 的控制器文件
php artisan db:seed:对数据库填充种子数据,以用于测试
php artisan key:generate:生成一个随机的 key,并自动更新到 app/config/app.ph 的 key 键值对
php artisan migrate:install:初始化迁移数据表
php artisan migrate:make 迁移名:这将在 app/database/migrations 目录下生成一个名为 时间+迁移名.php 的数据迁移文件,并自动执行一次 php artisan dump-autoload 命令
php artisan migrate:refresh:重置并重新执行所有的数据迁移
php artisan migrate:reset:回滚所有的数据迁移
php artisan migrate:rollback:回滚最近一次数据迁移
php artisan session:table:生成一个用于 session 的数据迁移文件
```
```
php artisan:显示详细的命令行帮助信息,同 php artisan list
php artisan –help:显示帮助命令的使用格式,同 php artisan help
php artisan –version:显示当前使用的 Laravel 版本
php artisan changes:列出当前版本相对于上一版本的主要变化
php artisan down:将站点设为维护状态
php artisan up:将站点设回可访问状态
php artisan optimize:优化应用程序性能,生成自动加载文件,且产生聚合编译文件 bootstrap/compiled.php
php artisan dump-autoload:重新生成框架的自动加载文件,相当于 optimize 的再操作
php artisan clear-compiled:清除编译生成的文件,相当于 optimize 的反操作
php artisan migrate:执行数据迁移
php artisan routes:列出当前应用全部的路由规则
php artisan serve:使用 PHP 内置的开发服务器启动应用 【要求 PHP 版本在 5.4 或以上】
php artisan tinker:进入与当前应用环境绑定的 REPL 环境,相当于 Rails 框架的 rails console 命令
php artisan workbench 组织名/包名:这将在应用根目录产生一个名为 workbench 的文件夹,然后按 组织名/包名 的形式生成一个符合 Composer 标准的包结构,并自动安装必要的依赖【需要首先完善好 app/config/workbench.php 文件的内容】
```
14. 登录密码
账号:super999 密码:Super@123
账号:admin999 密码:Admin@123