TanzCMS开源CMS系统

常用代码片段

模块、插件、路由、控制器、权限和模板标签的常用片段。

更新:2026-05-31 03:07:49 浏览:5

常用代码片段

本文收集模块、插件和 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">