常用代码片段
模块、插件、路由、控制器、权限和模板标签的常用片段。
常用代码片段
本文收集模块、插件和 PHP 开发中常见的短片段。片段只演示写法,真实业务应补齐权限、验证、日志、缓存和测试。
一、读取 manifest
$manifest = json_decode((string) $row->manifest, true);
$manifest = is_array($manifest) ? $manifest : [];
二、注册模块路由
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');
$this->loadTranslationsFrom($base.'/resources/lang', 'module-demo');
四、注册控制台命令
ServiceProvider:
if ($this->app->runningInConsole()) {
$this->commands([
DemoImportCommand::class,
]);
}
manifest:
{
"console_commands": [
"tanzcms:demo-import"
]
}
五、后台接口返回
return response()->json([
'message' => '保存成功',
'data' => $payload,
]);
六、表单验证
$data = $request->validate([
'title' => ['required', 'string', 'max:120'],
'sort' => ['nullable', 'integer', 'min:0'],
'status' => ['nullable', 'boolean'],
]);
七、事务写入
$id = DB::transaction(function () use ($data): int {
return (int) DB::table('demo_items')->insertGetId([
'title' => $data['title'],
'created_at' => now(),
'updated_at' => now(),
]);
});
八、分页查询
$query = DB::table('demo_items')->where('status', 1);
if ($keyword !== '') {
$query->where('title', 'like', '%'.$keyword.'%');
}
$page = $query->orderByDesc('id')->paginate(20);
关键词进入查询前应限制长度,并根据业务场景优先使用搜索索引或业务索引。
九、权限命名
module.demo.item
module.demo.item.create
module.demo.item.update
module.demo.item.delete
plugin.demo_plugin.settings
plugin.demo_plugin.settings.update
页面权限控制入口,功能权限控制接口动作。
十、模板标签处理器
class DemoTag implements TemplateTagHandlerContract
{
public function names(): array
{
return ['demo'];
}
public function render(string $name, array $attributes, string $body, TemplateRenderContext $context): string
{
$return = (string) ($attributes['return'] ?? 't');
// 查询数据后,把结构化数据交给模板循环体渲染。
return '';
}
}
十一、前台模板调用
{demo return=item}
<a href="{$item.url}">{$item.title}</a>
{empty}
<p>暂无数据</p>
{/empty}
{/demo}
模板使用结构化变量,不在 PHP 里拼列表卡片。
十二、资源引用
模块资源:
<link rel="stylesheet" href="{module_asset code=demo path='admin.css' version=mtime}">
插件资源:
<link rel="stylesheet" href="{plugin_asset code=demo_plugin path='style.css' version=mtime}">
普通主题资源优先使用:
<link rel="stylesheet" href="{THEME_PATH}css/style.css">