代码示例合集
最小模块、插件、模板标签、后台页面、API 和回调示例
代码示例合集
本页收集最小写法。示例用于说明结构,正式业务应补齐权限、验证、日志、缓存和测试。
一、最小模块 Provider
class DemoServiceProvider extends ServiceProvider
{
public function boot(): void
{
$base = dirname(__DIR__);
if (! $this->app->routesAreCached()) {
Route::middleware('web')->group($base.'/routes/web.php');
Route::middleware('web')->group($base.'/routes/admin.php');
}
$this->loadViewsFrom($base.'/resources/views', 'module-demo');
$this->loadMigrationsFrom($base.'/database/migrations');
}
}
二、最小插件 Provider
class DemoPluginServiceProvider extends ServiceProvider
{
public function boot(): void
{
$base = dirname(__DIR__);
if (! $this->app->routesAreCached()) {
Route::middleware('web')->group($base.'/routes/web.php');
Route::middleware('web')->group($base.'/routes/admin.php');
}
}
}
三、后台保存接口
public function store(Request $request): JsonResponse
{
$data = $request->validate([
'title' => ['required', 'string', 'max:120'],
'status' => ['nullable', 'boolean'],
]);
$id = DB::transaction(function () use ($data): int {
return (int) DB::table('demo_items')->insertGetId([
'title' => $data['title'],
'status' => (int) ($data['status'] ?? 1),
'created_at' => now(),
'updated_at' => now(),
]);
});
return response()->json([
'message' => '保存成功',
'data' => ['id' => $id],
]);
}
四、列表查询
$query = DB::table('demo_items')->select(['id', 'title', 'status', 'sort', 'updated_at']);
if ($keyword !== '') {
$query->where('title', 'like', '%'.$keyword.'%');
}
$page = $query->orderBy('sort')->orderByDesc('id')->paginate(20);
五、模板标签调用
{demo_items return=item num=10}
<a href="{$item.url}">{$item.title}</a>
{empty}
<p>暂无数据</p>
{/empty}
{/demo_items}
六、资源引用
<link rel="stylesheet" href="{module_asset code=demo path='style.css' version=mtime}">
<script src="{plugin_asset code=demo_plugin path='admin.js' version=mtime}"></script>
七、API 响应
return response()->json([
'code' => 0,
'message' => 'ok',
'data' => $payload,
]);
八、回调幂等
DB::transaction(function () use ($event): void {
$exists = DB::table('demo_callback_logs')->where('event_id', $event['id'])->exists();
if ($exists) {
return;
}
DB::table('demo_callback_logs')->insert([
'event_id' => $event['id'],
'created_at' => now(),
]);
// 执行业务状态变更。
});
九、主题模板片段
{template "header.html"}
<main class="site-main">
<h1>{$category.name}</h1>
{content catid=$category.id num=10 page=$query.page}
<article>
<h2><a href="{$t.url}">{$t.title}</a></h2>
<p>{$t.description}</p>
</article>
{/content}
{html $pages}
</main>
{template "footer.html"}