zhuitech / boot-laravel
Laravel项目基础功能增强
v3.3.17
2021-06-02 09:45 UTC
Requires
- bkwld/croppa: ^4.9
- laravel/framework: ^8.0
- league/fractal: ^0.17.0
- overtrue/laravel-lang: ~3.0
- dev-master
- 3.3.x-dev
- v3.3.17
- v3.3.16
- v3.3.15
- v3.3.14
- v3.3.13
- v3.3.12
- v3.3.11
- v3.3.10
- v3.3.9
- v3.3.8
- v3.3.7
- v3.3.6
- v3.3.5
- v3.3.4
- v3.3.3
- v3.3.2
- v3.3.1
- v3.3.0
- 3.2.x-dev
- v3.2.20
- v3.2.19
- v3.2.18
- v3.2.17
- v3.2.16
- v3.2.15
- v3.2.14
- v3.2.13
- v3.2.12
- v3.2.11
- v3.2.10
- v3.2.9
- v3.2.8
- v3.2.7
- v3.2.6
- v3.2.5
- v3.2.4
- v3.2.3
- v3.2.2
- v3.2.1
- v3.2.0
- 3.1.x-dev
- v3.1.56
- v3.1.55
- 3.1.54
- 3.0.18
- 2.1.17
- 2.0.22
This package is auto-updated.
Last update: 2025-03-29 00:59:29 UTC
README
Laravel 开发加速包
- 常用包的自动化配置
- 微服务快速开发框架
框架要求
Laravel >= 5.5
安装
为了灵活和速度,不直接依赖第三方包,在需要使用对应功能的时候,请添加第三方包。会自动配置已经安装的第三方包。
#安装主模块
composer require zhuitech/boot-laravel
配置
我们使用一个Provider来包含大部分的配置,这样比直接修改config目录要容易管理。
<?php // app/Providers/AppServiceProviders.php namespace App\Providers; use ZhuiTech\BootLaravel\Providers\LaravelProvider; use ZhuiTech\BootLaravel\Providers\AbstractServiceProvider; use ZhuiTech\BootLaravel\Providers\MicroServiceProvider; // 基类ServiceProvider中提供了很多方便的注册机制,请查看源码了解 class AppServiceProvider extends AbstractServiceProvider { protected $providers = [ LaravelProvider::class, // 如果是微服务,需要添加MicroServiceProvider MicroServiceProvider::class, ]; }
常用命令
一些常用的命令,方便在编码的时候快速参考。
# 更新Facade等提示 php artisan ide-helper:generate # 更新容器内对象提示 php artisan ide-helper:meta # 更新模型类提示 php artisan ide-helper:models -W -R # 发布前端资源 php artisan vendor:publish --force --tag=public
资源服务
模块提供了Restful基础增强类,可以快速开发出标准的Restful服务接口。
1. 创建模型
# app/Models/Channel.php
php artisan make:model -c -m Models/Channel
2. 生成数据库
<?php // database/migrations/2018_04_04_122200_create_channels_table.php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateChannelsTable extends Migration { public function up() { Schema::create('channels', function (Blueprint $table) { $table->increments('id'); // 添加需要的字段 $table->string('name')->comment('名称'); // ... $table->timestamps(); }); } public function down() { Schema::dropIfExists('channels'); } }
# 生成对应的表 php artisan migrate # 生成模型提示 php artisan ide-helper:models -W -R
3. 创建仓库类
<?php // app/Repositories/ChannelRepository.php namespace App\Repositories; use App\Models\Channel; use ZhuiTech\BootLaravel\Repositories\BaseRepository; // 基类BaseRepository提供了很多现成的方法,请查看源码了解 class ChannelRepository extends BaseRepository { function model() { return Channel::class; } }
4. 创建控制器
<?php // app/Http/Controllers/ChannelController.php namespace App\Http\Controllers; use App\Repositories\ChannelRepository; use ZhuiTech\BootLaravel\Controllers\RestController; // 基类ChannelController提供了很多现成的方法,请查看源码了解 class ChannelController extends RestController { public function __construct(ChannelRepository $repository) { parent::__construct($repository); } public function sample() { // 用以下方法会返回统一的数据格式 $this->success([]); $this->fail('fail sample message'); } }
5. 创建路由
// routes/api.php Route::group(['prefix' => 'mail',], function () { // Channels Route::resource('channels','ChannelController'); });
子资源服务
继承SubRestController就可以实现 parents/{id}/child/{id} 类似的子资源服务,下面提供一个消息发送记录的示例,主要是Controller和routes的写法有一些区别。
Controller
<?php namespace App\Http\Controllers; use App\Repositories\MessageRepository; use App\Repositories\SendingRepository; use ZhuiTech\BootLaravel\Controllers\SubRestController; // 基类SubRestController提供了很多现成的方法,请查看源码了解 class SendingController extends SubRestController { // 这里同时注入Parent和Client的仓库类 public function __construct(SendingRepository $repository, MessageRepository $parents) { parent::__construct($repository, $parents); } }
routes/api.php
Route::group(['prefix' => 'messages',], function () { Route::resource('{message}/sendings', 'SendingController'); });
微服务相互调用
模块提供了微服务调用的实用方法,在调用前需要先把微服务地址配置到.env文件。
SERVICE_MAIL=http://127.0.0.1:9001
微服务调用代码
// 请求后端服务 $result = RestClient::server('mail')->get('api/mail/channels'); // 处理返回结果 return Restful::handle($result, function($data, $message, $code) { // success }, function($data, $message, $code) { // fail });
微服务用户身份
微服务的授权在api网关实现,网关会把用户身份信息附带在http请求中传递给微服务。 MicroServiceProvider会自动配置授权机制,内建了后台(admins)和前台(members)两种授权方式。
// Channels Route::resource('channels', 'ChannelController')->middleware(['auth:admins']); Route::resource('channels', 'ChannelController')->middleware(['auth:members']);
最佳实践建议微服务中不要使用强制授权,在代码中判断用户是否存在。
$user = Auth::user(); if (empty($user)) { // 未登录 } else { // 已登录 $admin = $user->isAdmin(); $member = $user->isMember(); $id = $user->id; $type = $user->type; $ip = $user->ip; $user->loadData(); // 加载完整用户数据 }
如要对微服务单独测试,请在Postman中设置一下Headers。
# 用户UID X-User = 1 # 用户类型 X-User-Type = members
微服务示例
下面用Channels服务做列子。
1. 查询接口 [GET /api/mail/channels]
- 返回所有记录:/api/mail/channels?limit=-1&_order[id]=desc
- 返回部分记录:/api/mail/channels?limit=10
- 返回分页记录:/api/mail/channels?_page=1&_size=10
- 返回部分字段:/api/mail/channels?_column=id,name
- 返回符合条件的记录:- /api/mail/channels?type=smtp&name[like]=test&username[null]=1&id[>]=10
2. 创建接口 [POST /api/mail/channels]
3. 更新接口 [PUT /api/mail/channels/{id}]
4. 删除接口 [DELETE /api/mail/channels/{id}]
5. 子资源查询接口 [GET /api/mail/messages/{id}/sendings]
6. 子资源删除接口 [DELETE /api/mail/messages/{id}/sendings/{id}]
自定义配置
自定义配置功能用来在数据库存储一些个性化配置数据。 该功能依赖system服务,请在env文件配置 SERVICE_SYSTEM=https://system.test.z-cloud.vip
// 读取配置 $value = setting('key'); // 更新配置,$value可以是一个数组 setting(['key' => $value]);