项目在 support/facade 目录下提供了多种核心组件的门面封装,简化了常用功能的调用。
用于处理用户认证相关功能:
use support\facade\Auth;
// 获取当前登录用户
$user = Auth::guard()->getUser();
// 获取当前用户 ID
$result = Auth::guard()->getId()
// 判断当前用户是否登录
$isLogin = Auth::guard()->isGuest();使用 Laravel 组件
use support\facade\Cache;
// 存储缓存
Cache::set('key', 'value', 3600);
// 获取缓存
$value = Cache::get('key');
// 删除缓存
Cache::delete('key');使用 cache 函数的方式
use support\facade\Cache;
// 存储缓存
cache()->set('key', 'value', 3600);
// 获取缓存
$value = cache()->get('key');
// 删除缓存
cache()->delete('key');用于实现分布式锁功能:
use support\facade\CacheLocker;
// 获取锁,最多等待 10 秒
$lock = CacheLocker::test('lock-key', 10);
if ($lock->get()) {
// 获得锁,执行业务逻辑
// ...
// 释放锁
$lock->release();
}
// 或者使用自动释放锁的方式
$lock->block(10, function () {
// 在这里执行需要锁保护的代码
// 函数执行完后自动释放锁
});使用建议:
- 对每个业务单独定义一个锁,定义在
support\facade\CacheLocker进行补充
使用 Laravel 组件
use support\facade\Redis;
// 设置值
Redis::set('key', 'value');
// 获取值
$value = Redis::get('key');
// 执行 Redis 命令
Redis::hset('hash_key', 'field', 'value');使用建议:
- 需要使用缓存的地方应该尽可能先使用 Cache 组件,而不是直接使用 Redis 组件
use support\facade\Logger;
// 记录不同级别日志
Logger::app('这是一条信息日志');
Logger::operateLog('这是一条操作日志');
Logger::app('这是一条错误日志', 'error');
Logger::app('这是一条带 context 的日志', 'info', ['context' => '自定义 context']);使用建议:
- 对每个业务定义特定的 channel,定义在
support\facade\Logger进行补充
use support\facade\Storage;
// 保存文件
Storage::put('path/to/file.txt', '文件内容');
// 读取文件
$content = Storage::get('path/to/file.txt');
// 检查文件是否存在
$exists = Storage::exists('path/to/file.txt');用于处理本地文件操作:
use support\facade\File;
// 获取文件 MIME 类型
$mimeType = File::mimeType('/path/to/file.txt');
// 获取文件扩展名
$extension = File::guessExtension('/path/to/file.txt');
// 读取文件内容
$content = File::get('/path/to/file.txt');
// 写入文件内容
File::put('/path/to/file.txt', '文件内容');
// 追加内容到文件
File::append('/path/to/file.txt', '追加的内容');
// 检查文件是否存在
$exists = File::exists('/path/to/file.txt');
// 删除文件
File::delete('/path/to/file.txt');使用建议
- 尽可能使用
File代替原生 php 函数的使用,如:file_get_contents之类的
使用 Laravel 组件
use support\facade\Validator;
// 验证数据
$validator = Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email',
]);
if ($validator->fails()) {
// 处理验证失败
$errors = $validator->errors();
}使用 validator 函数
// 验证数据
$validator = validator($data, [
'name' => 'required|max:255',
'email' => 'required|email',
]);
if ($validator->fails()) {
// 处理验证失败
$errors = $validator->errors();
}使用建议
- 项目中使用
validator函数,而不是直接使用support\facade\Validator
use support\facade\Translation;
// 翻译指定的键
$message = Translation::trans('messages.welcome');
// 带参数的翻译
$message = Translation::trans('messages.welcome', ['name' => 'John']);
// 指定语言翻译
$message = Translation::trans('messages.welcome', [], 'en');使用 trans 函数
// 翻译指定的键
$message = trans('messages.welcome');
// 带参数的翻译
$message = trans('messages.welcome', ['name' => 'John']);
// 指定语言翻译
$message = trans('messages.welcome', [], 'en');use support\facade\TranslationLaravel;
// 翻译指定的键
$message = TranslationLaravel::get('messages.welcome');
// 带参数的翻译
$message = TranslationLaravel::get('messages.welcome', ['name' => 'John']);
// 指定语言翻译
$message = TranslationLaravel::get('messages.welcome', [], 'en');使用 transL 函数
// 翻译指定的键
$message = transL('messages.welcome');
// 带参数的翻译
$message = transL('messages.welcome', ['name' => 'John']);
// 指定语言翻译
$message = transL('messages.welcome', [], 'en');使用建议:
- 无论是 symfony 翻译组件还是 laravel 翻译组件,翻译的资源文件位置都在
resources/translations目录下
use support\facade\Event;
// 触发事件
Event::dispatch('user.registered', $user);
// 监听事件
Event::on('user.registered', function ($event) {
// 处理事件
});使用 event 函数
// 触发事件
event('user.registered', $user);监听事件的配置在 config/event.php 文件中
使用 Laravel Container 组件
use support\facade\Container;
// 解析实例
$repository = Container::get(RepositoryInterface::class);
// 实例化类并注入依赖
$instance = Container::make(SomeClass::class, ['parameter' => 'value']);
// 判断存在
$exist = Container::has(SomeClass::class);使用建议:
- 容器配置在
config/container.php文件中,相关的初始化单例等也都在其中配置
使用 Laravel Http 组件
use support\facade\Http;
// 发送 GET 请求
$response = Http::get('https://api.example.com/users');
// 发送 POST 请求
$response = Http::post('https://api.example.com/users', [
'name' => 'John',
'email' => 'john@example.com'
]);
// 发送带 headers 的请求
$response = Http::withHeaders([
'Authorization' => 'Bearer token',
'Accept' => 'application/json'
])->get('https://api.example.com/users');
// 发送 JSON 请求
$response = Http::asJson()->post('https://api.example.com/users', [
'name' => 'John'
]);
// 获取响应数据
$data = $response->json();
$statusCode = $response->status();
// 使用预定义的 httpbin 宏
$response = Http::httpbin()->get('/get');使用建议:
- 为了方便后续的 api 管理,应该尽可能使用
预定义宏的方式去使用,参考httpbin,定义在upport\facade\Http文件中
更多使用方式见:[Laravel Http 网络请求组件]
使用 webman 的 redis-queue
use support\facade\Queue;
// 同步发送消息到队列
Queue::send('queue-name', ['data' => 'value']);
// 异步发送消息到队列
Queue::sendAsync('queue-name', ['data' => 'value']);
// 延迟发送消息
Queue::send('queue-name', ['data' => 'value'], 60); // 延迟60秒
// 分发任务类
Queue::dispatch(YourJobConsumer::class, ['data' => 'value']);
// 异步分发任务类
Queue::dispatchAsync(YourJobConsumer::class, ['data' => 'value']);队列任务需要继承 app\components\BaseConsumer 类:
use app\components\BaseConsumer;
class YourJobConsumer extends BaseConsumer
{
public $queue = 'queue-name';
public function consume(array $data): void
{
// 处理队列任务
}
}在 config/process.php 添加启动进程
相关进程类写在 app/process 中
使用 Laravel artisan 组件
会自动扫描 app\command 目录下的命令
提供 php artisan 执行一个命令
常用目录介绍:
# 列出所有命令
php artisan list
# 创建一个 Command
php artisan make:command Test
# 列出所有 route
php artisan route:list全局函数定义在 support/functions.php 中