Appearance
模块后台
创建模块
创建模块请在后台 系统设置>模块设计
创建,系统会在 addons目录中创建模块,模块目录结构与Laravel是相似的,如果你会使用Laravel则没有使用难度。
配置文件
模块配置文件存放于 config 目录中
- config 模块基本信息
- permission 权限配置
配置文件 config.php
中的 admin、front配置段会影响站点>扩展模块
页面的按钮显示
模型
创建的模型文件请继承 Addons\AddonModel
,会继承一些好用的方法,下面再进行一些说明
static::addGlobalScope(new SiteScope)
查询时会根据site过滤数据,要求路由中存在site
参数- 你可以点开
Addons\AddonModel
文件查看继承的方法,我会在后期更新时添加其他好用的方法
<?php
namespace Addons\Blog\Models;
use Addons\AddonModel;
use App\Models\Scopes\SiteScope;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Article extends AddonModel
{
use HasFactory;
protected $table = 'hd_articles';
protected $fillable = ['title', 'content', 'type'];
protected static function booted()
{
static::addGlobalScope(new SiteScope);
}
protected static function newFactory()
{
return \Addons\Blog\Database\factories\ArticleFactory::new();
}
}
路由
因为平台会有众多模块,为了在URL上进行区分,路由需要以模块名
为前缀,建议使用以下方式声明路由。
- 所有路由必须包含站点,所以下面的路由使用了
'site.article
- 系统会根据site请求参数,对表的结果进行限制,即只查看当前站点数据,当然需要在模型中进行相关声明
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Addons\Blog\Controllers\ArticleController;
Route::prefix('Blog')->group(function () {
Route::apiResource('site.article', ArticleController::class);
});
控制器
需要将默认生成的控制器继承 Addons\AddonController
,这样会拥有 policy
、success
等功能。
下面是一个控制器示例,有以下几个特点
- 包含
policy
功能,对请求进行验证 - 包含
$this->success
等方法,用于响应结果 - 分页列表不要使用
$this->success
方法响应结果
use Addons\Blog\Models\Article;
use Addons\Blog\Transformers\ArticleResource;
use Addons\AddonController;
use App\Models\Site;
use Illuminate\Http\Request;
class ArticleController extends AddonController
{
public function __construct()
{
$this->middleware(['auth:sanctum'])->except(['index', 'show']);
//进行policy验证,但对index不验证
$this->authorizeResource(Article::class, 'article', ['except' => 'index']);
}
public function index(Site $site)
{
return ArticleResource::collection(Article::paginate(10));
}
public function store(Request $request, Site $site, Article $article)
{
$article->site()->associate($site);
$article->fill($request->input())->save();
return $this->success('文章添加成功', $article);
}
...
}
Policy
policy用于对请求进行验证,使用非常方便。但默认创建的Policy只有简单方法,你根据下表创建相应方法。
控制器方法 | 策略方法 |
---|---|
index | viewAny |
show | view |
create | create |
store | create |
edit | update |
update | update |
destroy | delete |