Documentation
¶
Overview ¶
Package buffalo 提供 GoAdmin 与 Buffalo Web 框架的适配器实现
文件名: buffalo.go 包名: buffalo 作者: GoAdmin Core Team 创建日期: 2019
功能描述: 本包实现了 GoAdmin 管理后台与 Buffalo Web 框架的适配器,允许 GoAdmin 在 Buffalo 应用中运行 该适配器作为 Buffalo 框架和 GoAdmin 管理后台之间的桥梁,实现了适配器接口的所有方法 通过该适配器,开发者可以在 Buffalo 应用中快速集成 GoAdmin 管理后台功能
核心概念: - 适配器模式: 将 GoAdmin 的核心功能适配到 Buffalo 框架中 - 上下文转换: 将 Buffalo 的 buffalo.Context 转换为 GoAdmin 的 context.Context - 路由集成: 将 GoAdmin 的路由注册到 Buffalo 的路由系统中 - 中间件链: 支持 Buffalo 的中间件和 GoAdmin 的处理器链 - 请求处理: 统一处理 HTTP 请求和响应 - Cookie 认证: 支持 GoAdmin 的 Cookie 认证机制 - PJAX 支持: 支持 PJAX 技术实现页面部分更新 - 多语言: 支持多语言切换功能
技术栈: - Buffalo: Go 语言的 Web 框架,提供 MVC 架构、路由、中间件等功能 - GoAdmin: Go 语言的后台管理框架,提供数据表格、表单、图表等组件 - Go 标准库: bytes、errors、net/http、net/url、regexp、strings 等
数据库支持: - MySQL - PostgreSQL - SQLite - MSSQL
配置说明: - 通过 config.SetCfg(cfg) 设置 GoAdmin 配置 - 通过 config.GetLoginUrl() 获取登录页面 URL - 通过 config.Url(path) 生成带前缀的 URL - 通过 constant.EditPKKey 获取编辑主键的常量
使用示例:
package main
import (
"github.com/gobuffalo/buffalo"
"github.com/purpose168/GoAdmin"
"github.com/purpose168/GoAdmin/adapter/buffalo"
_ "github.com/purpose168/GoAdmin/plugins/admin"
"github.com/purpose168/GoAdmin/plugins/admin/modules/constant"
_ "github.com/purpose168/GoAdmin/plugins/example"
)
func main() {
// 初始化 Buffalo 应用
app := buffalo.New(buffalo.Options{
Env: "development",
Addr: "127.0.0.1:3000",
})
// 设置 GoAdmin 配置
cfg := config.Config{
Domain: "localhost",
// ... 其他配置
}
config.SetCfg(cfg)
// 使用 Buffalo 适配器
_ = GoAdmin.Init(buffaloAdapter(app))
// 启动 Buffalo 服务
app.Serve()
}
func buffaloAdapter(app *buffalo.App) *buffalo.Buffalo {
eng := buffalo.New()
_ = eng.SetApp(app)
return eng
}
注意事项: - Buffalo 适配器需要 Buffalo v0.16+ 版本 - 路由参数格式为 :param,会自动转换为 {param} 格式 - 表单解析的最大内存限制为 32MB - Cookie 认证使用默认的 Cookie 键名 - PJAX 请求通过 X-PJAX 请求头识别 - 语言设置通过 __ga_lang 查询参数传递 - 支持自定义 Content-Type 响应头 - 支持自定义响应状态码和响应体
Index ¶
- func Content(handler HandlerFunc) buffalo.Handler
- type Buffalo
- func (bu *Buffalo) AddHandler(method, path string, handlers context.Handlers)
- func (bu *Buffalo) Content(ctx interface{}, getPanelFn types.GetPanelFn, fn context.NodeProcessor, ...)
- func (bu *Buffalo) FormParam() neturl.Values
- func (bu *Buffalo) GetCookie() (string, error)
- func (bu *Buffalo) IsPjax() bool
- func (bu *Buffalo) Lang() string
- func (bu *Buffalo) Method() string
- func (*Buffalo) Name() string
- func (bu *Buffalo) Path() string
- func (bu *Buffalo) Query() neturl.Values
- func (bu *Buffalo) Redirect()
- func (bu *Buffalo) Request() *http.Request
- func (bu *Buffalo) SetApp(app interface{}) error
- func (bu *Buffalo) SetContentType()
- func (*Buffalo) SetContext(contextInterface interface{}) adapter.WebFrameWork
- func (bu *Buffalo) Use(app interface{}, plugs []plugins.Plugin) error
- func (bu *Buffalo) User(ctx interface{}) (models.UserModel, bool)
- func (bu *Buffalo) Write(body []byte)
- type HandleFun
- type HandlerFunc
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Content ¶
func Content(handler HandlerFunc) buffalo.Handler
Content 是一个辅助函数,用于将 HandlerFunc 转换为 Buffalo 的 Handler 这样可以在 Buffalo 的路由中使用 GoAdmin 的处理函数,简化集成过程
参数:
- handler: 处理函数,接收 Buffalo 上下文并返回面板,类型为 HandlerFunc
返回值:
- buffalo.Handler: Buffalo 处理器函数,可以在 Buffalo 的路由中使用
功能特性:
- 将 HandlerFunc 转换为 Buffalo 的 Handler
- 简化 GoAdmin 与 Buffalo 的集成
- 支持在 Buffalo 路由中使用 GoAdmin 处理函数
- 支持自定义处理逻辑
说明:
该辅助函数接收一个 HandlerFunc 类型的处理函数,返回一个 buffalo.Handler 类型的处理器函数 处理器函数内部调用 GoAdmin 的 engine.Content 方法,传入 Buffalo 上下文和处理函数 engine.Content 方法会调用处理函数,获取面板内容,并渲染为 HTML 响应 处理器函数可以在 Buffalo 的路由中使用,支持 GET、POST 等 HTTP 方法 使用该辅助函数可以简化 GoAdmin 与 Buffalo 的集成,无需手动处理上下文转换和响应渲染 该辅助函数通常在应用启动时使用,用于注册管理后台的路由和处理器
使用示例:
// 定义处理函数
handler := func(ctx buffalo.Context) (types.Panel, error) {
// 自定义处理逻辑
panel := types.NewPanel()
// ... 设置面板内容
return panel, nil
}
// 使用 Content 辅助函数创建 Buffalo 处理器
buffaloHandler := Content(handler)
// 注册处理器到 Buffalo 应用
app.GET("/admin", buffaloHandler)
注意事项:
- 处理函数不能为空,必须返回有效的面板或错误
- 处理器函数应该在适当的 HTTP 方法中注册(如 GET、POST)
- 处理器函数应该尽早注册,确保在其他路由之前执行
- 处理器函数应该正确处理错误,避免 panic
- 处理器函数应该避免修改传入的上下文,除非必要
Types ¶
type Buffalo ¶
type Buffalo struct {
adapter.BaseAdapter // BaseAdapter: 基础适配器,提供通用的适配器功能
// contains filtered or unexported fields
}
Buffalo 结构体实现了 GoAdmin 的适配器接口 它作为 Buffalo 框架和 GoAdmin 管理后台之间的桥梁,实现了适配器接口的所有方法 嵌入了 adapter.BaseAdapter 以获得基础适配器功能(如 GetUser、GetUse、GetContent 等) ctx 字段存储当前的 Buffalo 上下文,用于访问请求和响应对象 app 字段存储 Buffalo 应用实例,用于注册路由和处理器
func (*Buffalo) AddHandler ¶
AddHandler 实现了 Adapter.AddHandler 方法 该方法用于向 Buffalo 应用添加路由处理器,将 GoAdmin 的路由注册到 Buffalo 的路由系统中
参数:
- method: HTTP 方法,如 "GET"、"POST"、"PUT"、"DELETE" 等
- path: 路由路径,如 "/admin"、"/admin/users" 等
- handlers: 处理器链,包含要执行的中间件和处理器,类型为 context.Handlers
返回值:
- 无返回值
功能特性:
- 将 GoAdmin 的路由注册到 Buffalo 的路由系统中
- 支持多种 HTTP 方法(GET、POST、PUT、DELETE 等)
- 支持路由参数(如 :id、:name 等)
- 支持处理器链(中间件和处理器)
- 支持上下文转换(Buffalo 上下文转换为 GoAdmin 上下文)
- 支持响应头复制(GoAdmin 响应头复制到 Buffalo 响应中)
- 支持响应体写入(GoAdmin 响应体写入到 Buffalo 响应中)
说明:
该方法调用 Buffalo 应用的路由注册函数,注册路由处理器
路由处理器接收 Buffalo 上下文,处理 HTTP 请求和响应
首先使用正则表达式将 Buffalo 的路由参数格式 :param 转换为 Go 标准格式 {param}
reg1 匹配中间的参数,如 :id/,转换为 {id}/
reg2 匹配结尾的参数,如 :id$,转换为 {id}
然后根据方法类型获取对应的路由注册函数(GET、POST、PUT、DELETE 等)
路由处理器内部处理请求:
1. 如果路径以 / 结尾,移除末尾的 /
2. 创建 GoAdmin 上下文
3. 获取 Buffalo 的路由参数并转换为 URL 查询参数
4. 执行处理器链
5. 将 GoAdmin 响应头复制到 Buffalo 响应中
6. 设置响应状态码
7. 将响应体写入 Buffalo 响应
该方法通常在 Use 方法中被调用,用于注册插件的路由
注意事项:
- method 参数必须为大写,如 "GET"、"POST" 等
- path 参数不能为空,必须以 "/" 开头
- handlers 参数不能为空,至少包含一个处理器
- 路由参数格式为 :param,会自动转换为 {param} 格式
- 处理器链执行顺序为从左到右,中间件先执行,处理器后执行
- 该方法支持并发调用,但需要注意路由注册的线程安全性
- 该方法会修改响应头和响应体,确保在调用前未写入响应
func (*Buffalo) Content ¶
func (bu *Buffalo) Content(ctx interface{}, getPanelFn types.GetPanelFn, fn context.NodeProcessor, btns ...types.Button)
Content 实现了 Adapter.Content 方法 该方法用于渲染管理面板内容,将 GoAdmin 的面板渲染为 HTML 响应
参数:
- ctx: 上下文接口,通常为 buffalo.Context 类型,包含当前请求的上下文信息
- getPanelFn: 获取面板的函数,返回 types.Panel 类型的面板,用于生成管理面板内容
- fn: 节点处理器,用于处理上下文中的节点,支持自定义处理逻辑
- btns: 导航按钮列表,可变参数,用于在面板顶部显示导航按钮
返回值:
- 无返回值
功能特性:
- 渲染 GoAdmin 管理面板为 HTML 响应
- 支持自定义面板内容
- 支持自定义节点处理器
- 支持自定义导航按钮
- 支持多种面板类型(表格、表单、图表等)
说明:
该方法调用了基础适配器的 GetContent 方法,传入 Buffalo 上下文、获取面板函数、导航按钮和节点处理器 GetContent 方法会调用 getPanelFn 函数获取面板内容 面板内容包含数据表格、表单、图表等组件 节点处理器 fn 用于处理面板中的节点,支持自定义处理逻辑 导航按钮 btns 会显示在面板顶部,用于快速导航 渲染后的 HTML 会写入到响应中,通过 Write 方法发送给客户端 该方法通常在路由处理器中调用,用于渲染管理页面
注意事项:
- 该方法需要在请求处理中调用,确保上下文已正确设置
- getPanelFn 函数不能为空,必须返回有效的面板
- 节点处理器 fn 可以为空,使用默认处理逻辑
- 导航按钮 btns 可以为空,不显示导航按钮
- 该方法会修改响应头和响应体,确保在调用前未写入响应
- 该方法支持并发调用,但需要注意面板生成的线程安全性
func (*Buffalo) FormParam ¶
FormParam 实现了 Adapter.FormParam 方法 该方法用于解析并获取表单参数,用于表单数据处理
返回值:
- neturl.Values: 表单参数的键值对集合,包含所有表单字段
功能特性:
- 解析并获取表单参数
- 支持多种表单类型(application/x-www-form-urlencoded、multipart/form-data 等)
- 支持文件上传
- 解析的最大内存限制为 32MB
说明:
该方法调用 Buffalo 请求的 ParseMultipartForm 方法,解析表单参数 解析的最大内存限制为 32MB,超过限制会返回错误 该方法返回表单参数的键值对集合,类型为 neturl.Values neturl.Values 是 map[string][]string 类型,支持多值字段 该方法支持多种表单类型,包括 application/x-www-form-urlencoded 和 multipart/form-data 该方法通常在表单提交时被调用,用于获取表单数据
注意事项:
- 该方法会解析表单参数,可能影响性能
- 该方法的最大内存限制为 32MB,超过限制会返回错误
- 该方法忽略解析错误,使用 _ 忽略返回值
- 该方法支持并发调用,但需要注意表单解析的线程安全性
- 该方法应该在表单提交时调用,确保表单参数正确解析
- 该方法应该只调用一次,多次调用会重复解析表单
func (*Buffalo) GetCookie ¶
GetCookie 实现了 Adapter.GetCookie 方法 该方法用于从请求中获取认证 Cookie,用于用户身份验证
返回值:
- string: Cookie 值,包含用户认证信息
- error: 错误信息,如果获取失败则返回错误
功能特性:
- 从请求中获取认证 Cookie
- 支持自定义 Cookie 键名
- 支持错误处理
说明:
该方法调用 Buffalo 上下文的 Cookies().Get() 方法,获取认证 Cookie Cookie 键名通过 CookieKey() 方法获取,支持自定义 Cookie 键名 CookieKey() 方法是基础适配器的方法,默认为 "admin_cookie" 该方法返回 Cookie 值和错误,如果 Cookie 不存在则返回错误 该方法通常在 User 方法中被调用,用于获取用户认证信息
注意事项:
- 该方法返回的 Cookie 值可能为空,表示用户未认证
- 该方法返回的错误表示 Cookie 不存在或获取失败
- 该方法支持并发调用,但需要注意 Cookie 的线程安全性
- 该方法应该在 User 方法之前调用,确保 Cookie 正确获取
func (*Buffalo) IsPjax ¶
IsPjax 实现了 Adapter.IsPjax 方法 该方法用于检查当前请求是否为 PJAX 请求,PJAX 是一种使用 AJAX 技术实现页面部分更新的技术
返回值:
- bool: 如果是 PJAX 请求则返回 true,否则返回 false
功能特性:
- 检查当前请求是否为 PJAX 请求
- 支持页面部分更新
- 支持无刷新导航
说明:
该方法调用 Buffalo 请求的 Header.Get() 方法,获取 PJAX 请求头 PJAX 请求头为 "X-PJAX",由 constant.PjaxHeader 常量定义 如果 PJAX 请求头的值为 "true",则返回 true,表示是 PJAX 请求 如果 PJAX 请求头的值不为 "true" 或不存在,则返回 false,表示不是 PJAX 请求 PJAX 是一种使用 AJAX 技术实现页面部分更新的技术,可以避免整页刷新 该方法通常在渲染模板时被调用,用于判断是否渲染完整页面或部分内容
注意事项:
- 该方法返回的布尔值表示是否为 PJAX 请求
- 该方法支持并发调用,但需要注意请求头的线程安全性
- 该方法应该在渲染模板前调用,确保 PJAX 状态正确判断
- 该方法应该与前端 PJAX 库配合使用,确保 PJAX 请求正确识别
func (*Buffalo) Lang ¶
Lang 实现了 Adapter.Lang 方法 该方法用于从 URL 查询参数中获取语言设置,用于多语言支持
返回值:
- string: 语言代码,如 "zh-CN"、"en-US" 等
功能特性:
- 从 URL 查询参数中获取语言设置
- 支持自定义语言参数名
- 支持多语言切换
说明:
该方法调用 Buffalo 请求的 URL.Query().Get() 方法,获取语言设置 语言参数名为 "__ga_lang",支持自定义语言参数名 语言代码格式为 "zh-CN"、"en-US" 等,遵循 RFC 5646 标准 该方法返回语言代码,如果未设置则返回空字符串 该方法通常在渲染模板时被调用,用于设置语言环境
注意事项:
- 该方法返回的语言代码可能为空,表示使用默认语言
- 该方法支持并发调用,但需要注意查询参数的线程安全性
- 该方法应该在渲染模板前调用,确保语言环境正确设置
- 该方法返回的语言代码应该有效,否则可能导致渲染错误
func (*Buffalo) Method ¶
Method 实现了 Adapter.Method 方法 该方法用于获取当前请求的 HTTP 方法,用于请求类型判断和日志记录
返回值:
- string: HTTP 方法,如 "GET"、"POST"、"PUT"、"DELETE" 等
功能特性:
- 获取当前请求的 HTTP 方法
- 支持所有 HTTP 方法
- 支持请求类型判断
说明:
该方法调用 Buffalo 请求的 Method 属性,获取当前请求的 HTTP 方法 HTTP 方法包括 GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS 等 该方法返回 HTTP 方法,为大写字母,如 "GET"、"POST" 等 该方法通常在请求类型判断和日志记录时被调用
注意事项:
- 该方法返回的 HTTP 方法为大写字母
- 该方法支持所有 HTTP 方法
- 该方法支持并发调用,但需要注意请求的线程安全性
- 该方法应该在请求处理中调用,确保 HTTP 方法正确获取
func (*Buffalo) Name ¶
Name 实现了 Adapter.Name 方法 该方法返回适配器的名称,用于标识适配器类型
返回值:
- string: 适配器名称,固定为 "buffalo"
功能特性:
- 返回适配器名称
- 用于标识适配器类型
- 用于日志记录和调试
说明:
该方法返回适配器的名称,固定为 "buffalo" 适配器名称用于标识适配器类型,可以在日志中记录,便于调试 适配器名称也可以用于配置文件中,指定使用哪个适配器 该方法通常在适配器注册时被调用,用于标识适配器类型
注意事项:
- 该方法返回的名称必须与适配器类型一致
- 该方法返回的名称不能为空
- 该方法返回的名称应该唯一,避免与其他适配器冲突
func (*Buffalo) Path ¶
Path 实现了 Adapter.Path 方法 该方法用于获取当前请求的路径,用于路由匹配和日志记录
返回值:
- string: 请求路径,如 "/admin/dashboard"、"/admin/users" 等
功能特性:
- 获取当前请求的路径
- 不包含查询参数
- 支持路由匹配
说明:
该方法调用 Buffalo 请求的 URL.Path 属性,获取当前请求的路径 路径不包含查询参数,如 "/admin/dashboard?page=1" 的路径为 "/admin/dashboard" 路径以 "/" 开头,表示根路径 该方法返回路径,如果路径为空则返回 "/" 该方法通常在路由匹配和日志记录时被调用
注意事项:
- 该方法返回的路径不包含查询参数
- 该方法返回的路径以 "/" 开头
- 该方法支持并发调用,但需要注意请求的线程安全性
- 该方法应该在请求处理中调用,确保路径正确获取
func (*Buffalo) Query ¶
Query 实现了 Adapter.Query 方法 该方法用于获取 URL 查询参数,用于查询参数处理和分页等
返回值:
- neturl.Values: 查询参数的键值对集合,包含所有查询参数
功能特性:
- 获取 URL 查询参数
- 支持多值字段
- 支持分页、排序、筛选等功能
说明:
该方法调用 Buffalo 请求的 URL.Query() 方法,获取 URL 查询参数 查询参数格式为 ?key1=value1&key2=value2,如 ?page=1&pageSize=10 该方法返回查询参数的键值对集合,类型为 neturl.Values neturl.Values 是 map[string][]string 类型,支持多值字段 该方法支持分页、排序、筛选等功能,通过查询参数传递 该方法通常在数据查询时被调用,用于获取查询参数
注意事项:
- 该方法返回的查询参数可能为空,表示没有查询参数
- 该方法支持多值字段,如 ?id=1&id=2
- 该方法支持并发调用,但需要注意查询参数的线程安全性
- 该方法应该在数据查询时调用,确保查询参数正确获取
func (*Buffalo) Redirect ¶
func (bu *Buffalo) Redirect()
Redirect 实现了 Adapter.Redirect 方法 该方法用于重定向到登录页面,使用 HTTP 302 状态码进行临时重定向
返回值:
- 无返回值
功能特性:
- 重定向到登录页面
- 使用 HTTP 302 状态码进行临时重定向
- 支持自定义登录页面 URL
说明:
该方法调用 Buffalo 上下文的 Redirect 方法,重定向到登录页面 使用 HTTP 302 状态码进行临时重定向,表示资源临时移动 登录页面 URL 通过 config.GetLoginUrl() 获取,支持自定义登录页面 URL 重定向 URL 通过 config.Url() 生成,支持 URL 前缀配置 该方法通常在用户未认证时被调用,重定向到登录页面 该方法在 GoAdmin 的中间件中被调用,用于检查用户认证状态
注意事项:
- 该方法会修改响应头和响应体,确保在调用前未写入响应
- 该方法会终止请求处理,后续代码不会执行
- 该方法应该在用户未认证时调用,避免无限重定向
- 该方法支持并发调用,但需要注意重定向的线程安全性
func (*Buffalo) Request ¶
Request 实现了 Adapter.Request 方法 该方法用于获取原始的 HTTP 请求对象,用于底层请求处理
返回值:
- *http.Request: HTTP 请求对象指针,包含请求的所有信息
功能特性:
- 获取原始的 HTTP 请求对象
- 支持底层请求处理
- 支持自定义请求处理逻辑
说明:
该方法调用 Buffalo 上下文的 Request() 方法,获取原始的 HTTP 请求对象 HTTP 请求对象包含请求的所有信息,如 URL、方法、头、体等 该方法返回的是原始的 HTTP 请求对象,不是 Buffalo 的上下文对象 该方法通常在底层请求处理时被调用,用于自定义请求处理逻辑
注意事项:
- 该方法返回的 HTTP 请求对象可能为空,表示请求未初始化
- 该方法返回的 HTTP 请求对象是原始对象,修改会影响请求处理
- 该方法支持并发调用,但需要注意请求对象的线程安全性
- 该方法应该在底层请求处理时调用,确保请求对象正确获取
- 该方法应该谨慎使用,避免修改请求对象导致意外行为
func (*Buffalo) SetApp ¶
SetApp 实现了 Adapter.SetApp 方法 该方法用于设置 Buffalo 应用实例到适配器中,用于后续的路由注册和请求处理
参数:
- app: 应用接口,必须为 *buffalo.App 类型,表示 Buffalo 应用实例
返回值:
- error: 错误信息,如果参数类型不正确则返回错误,设置成功则返回 nil
功能特性:
- 设置 Buffalo 应用实例到适配器中
- 支持类型检查,确保参数类型正确
- 支持错误处理,提供友好的错误信息
说明:
该方法接收一个应用接口,使用类型断言检查是否为 *buffalo.App 类型 如果类型断言失败,返回错误 "buffalo 适配器 SetApp: 参数类型错误" 如果类型断言成功,将 Buffalo 应用实例存储到适配器的 app 字段中 Buffalo 应用实例用于后续的路由注册和请求处理 该方法通常在适配器初始化时调用,用于设置 Buffalo 应用实例 该方法在 Use 方法中被调用,传入 Buffalo 应用实例
注意事项:
- app 参数必须为 *buffalo.App 类型,否则返回错误
- 该方法应该在 Use 方法之前调用,确保应用实例已设置
- 该方法只能调用一次,重复调用会覆盖之前的应用实例
- 该方法支持并发调用,但需要注意应用实例的线程安全性
- 该方法返回错误后,适配器无法正常工作
func (*Buffalo) SetContentType ¶
func (bu *Buffalo) SetContentType()
SetContentType 实现了 Adapter.SetContentType 方法 该方法用于设置响应的 Content-Type 头,Content-Type 由 HTMLContentType() 方法确定
返回值:
- 无返回值
功能特性:
- 设置响应的 Content-Type 头
- 支持自定义 Content-Type
- Content-Type 由 HTMLContentType() 方法确定
说明:
该方法调用 Buffalo 响应头的 Set 方法,设置 Content-Type 头 Content-Type 由 HTMLContentType() 方法确定,通常为 "text/html; charset=utf-8" HTMLContentType() 方法是基础适配器的方法,支持自定义 Content-Type 该方法通常在渲染 HTML 响应前被调用,设置正确的 Content-Type 该方法在 GoAdmin 的渲染器中被调用,用于设置响应的 Content-Type
注意事项:
- 该方法会修改响应头,确保在调用前未写入响应
- 该方法应该在渲染 HTML 响应前调用,确保 Content-Type 正确
- 该方法支持并发调用,但需要注意响应头的线程安全性
func (*Buffalo) SetContext ¶
func (*Buffalo) SetContext(contextInterface interface{}) adapter.WebFrameWork
SetContext 实现了 Adapter.SetContext 方法 该方法用于设置当前请求的上下文,用于后续的请求处理
参数:
- contextInterface: 上下文接口,必须为 buffalo.Context 类型,表示 Buffalo 上下文
返回值:
- adapter.WebFrameWork: 返回设置了上下文的新适配器实例
功能特性:
- 设置当前请求的上下文
- 支持类型检查,确保参数类型正确
- 支持错误处理,提供友好的错误信息
- 返回新的适配器实例,避免修改原适配器
说明:
该方法接收一个上下文接口,使用类型断言检查是否为 buffalo.Context 类型 如果类型断言失败,panic 抛出错误 "buffalo 适配器 SetContext: 参数类型错误" 如果类型断言成功,创建新的适配器实例,设置 Buffalo 上下文到 ctx 字段中 新的适配器实例用于后续的请求处理,避免修改原适配器 该方法通常在每个请求处理时被调用,用于设置当前请求的上下文 该方法在 User、Content、Redirect、SetContentType、Write、GetCookie、Lang、Path、Method、FormParam、IsPjax、Query、Request 等方法中被使用
注意事项:
- contextInterface 参数必须为 buffalo.Context 类型,否则 panic
- 该方法返回新的适配器实例,不会修改原适配器
- 该方法应该在每个请求处理时调用,确保上下文正确设置
- 该方法支持并发调用,但需要注意上下文的线程安全性
- 该方法 panic 后,请求处理会中断,返回 500 错误
func (*Buffalo) Use ¶
Use 实现了 Adapter.Use 方法 该方法用于将插件注册到 Buffalo 应用中,用于扩展 GoAdmin 的功能
参数:
- app: 应用接口,通常为 *buffalo.App 类型,表示 Buffalo 应用实例
- plugs: 插件列表,包含需要注册的所有插件(如管理员插件、示例插件等)
返回值:
- error: 错误信息,如果注册失败则返回错误,注册成功则返回 nil
功能特性:
- 将 GoAdmin 插件注册到 Buffalo 应用中
- 支持多个插件同时注册
- 支持插件路由注册
- 支持插件中间件注册
- 支持插件配置管理
说明:
该方法调用了基础适配器的 GetUse 方法,传入 Buffalo 应用实例和插件列表 GetUse 方法会遍历插件列表,为每个插件调用 Init 方法进行初始化 插件初始化会注册插件的路由、中间件、配置等 插件路由会通过 AddHandler 方法注册到 Buffalo 应用中 插件中间件会添加到处理器链中,在请求处理前执行 插件配置会存储到 GoAdmin 的配置中,供后续使用 该方法通常在应用启动时调用,用于初始化所有插件
注意事项:
- 该方法需要在应用启动前调用,确保所有插件正确初始化
- 插件列表不能为空,至少需要注册一个插件(如管理员插件)
- 插件初始化顺序很重要,依赖关系需要正确处理
- 如果插件初始化失败,会返回错误,应用无法启动
- 该方法支持并发调用,但需要注意插件初始化的线程安全性
func (*Buffalo) User ¶
User 实现了 Adapter.User 方法 该方法用于从当前上下文中获取用户信息,用于身份验证和权限控制
参数:
- ctx: 上下文接口,通常为 buffalo.Context 类型,包含当前请求的上下文信息
返回值:
- models.UserModel: 用户模型,包含用户信息(如用户名、角色、权限等)
- bool: 是否成功获取用户信息,true 表示成功,false 表示失败
功能特性:
- 从 Buffalo 上下文中提取用户信息
- 支持多种认证方式(Cookie、Session、Token 等)
- 支持用户权限验证
- 支持用户角色管理
- 支持用户会话管理
说明:
该方法调用了基础适配器的 GetUser 方法,传入 Buffalo 上下文和当前适配器实例 GetUser 方法会从上下文中提取认证信息(如 Cookie),并查询数据库获取用户信息 如果用户不存在或认证失败,返回空的 UserModel 和 false 如果用户存在且认证成功,返回完整的 UserModel 和 true UserModel 包含用户的基本信息(如用户名、邮箱、角色、权限等) 该方法在每次请求时都会被调用,用于验证用户身份和权限
注意事项:
- 该方法需要在请求处理前调用,确保用户已认证
- 如果用户未认证,返回的 UserModel 为空,bool 为 false
- 该方法会查询数据库,可能影响性能
- 建议在中间件中调用该方法,统一处理用户认证
- 该方法支持并发调用,但需要注意数据库连接池的配置
func (*Buffalo) Write ¶
Write 实现了 Adapter.Write 方法 该方法用于将响应体写入到响应中
参数:
- body: 要写入的响应体字节数组,包含 HTML、JSON 等数据
返回值:
- 无返回值
功能特性:
- 将响应体写入到响应中
- 支持写入任意字节数组
- 支持写入 HTML、JSON 等数据
说明:
该方法调用 Buffalo 响应的 WriteHeader 和 Write 方法,将响应体写入到响应中 首先设置响应状态码为 200(OK),然后写入响应体 响应体可以是 HTML、JSON 等数据,由调用方决定 该方法通常在渲染完成后被调用,将渲染结果写入响应 该方法在 GoAdmin 的渲染器中被调用,用于写入响应体
注意事项:
- 该方法会修改响应体,确保在调用前已设置响应头
- 该方法应该在渲染完成后调用,确保响应体完整
- 该方法支持并发调用,但需要注意响应体的线程安全性
- 该方法忽略写入错误,使用 _ 忽略返回值
type HandleFun ¶
HandleFun 定义了 Buffalo 路由方法的函数类型 该类型用于表示 Buffalo 的路由注册函数,如 GET、POST 等
参数:
- p: 路由路径
- h: 处理器函数
返回值:
- *buffalo.RouteInfo: 路由信息指针
功能特性:
- 定义 Buffalo 路由注册函数的签名
- 支持 GET、POST、PUT、DELETE 等 HTTP 方法
- 支持路由信息返回
说明:
该类型定义了 Buffalo 路由注册函数的签名,用于在 getHandleFunc 函数中使用 Buffalo 的路由注册函数包括 GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH 等 该类型接收路由路径和处理器函数,返回路由信息指针 路由信息包含路由路径、处理器函数、HTTP 方法等信息 该类型通常在 getHandleFunc 函数中使用,用于根据方法名称返回对应的路由注册函数
注意事项:
- 路由路径不能为空,必须以 "/" 开头
- 处理器函数不能为空,必须返回有效的响应
- 路由信息指针可能为 nil,表示路由注册失败
type HandlerFunc ¶
HandlerFunc 定义了处理函数的类型 该函数接收 Buffalo 上下文,返回面板和可能的错误,用于自定义处理逻辑
参数:
- ctx: Buffalo 上下文,包含当前请求的上下文信息
返回值:
- types.Panel: 管理面板,包含面板内容(如数据表格、表单、图表等)
- error: 错误信息,如果处理失败则返回错误,处理成功则返回 nil
功能特性:
- 支持自定义处理逻辑
- 支持返回自定义面板
- 支持错误处理
- 支持异步处理
说明:
该类型定义了处理函数的签名,用于在 Buffalo 路由处理器中使用 处理函数接收 Buffalo 上下文,可以访问请求和响应对象 处理函数返回面板和错误,面板会被渲染为 HTML 响应 如果处理失败,返回错误,GoAdmin 会显示错误页面 处理函数可以访问数据库、调用 API、执行业务逻辑等 该类型通常与 Content 辅助函数一起使用,用于创建自定义处理器
使用示例:
// 定义处理函数
handler := func(ctx buffalo.Context) (types.Panel, error) {
// 自定义处理逻辑
panel := types.NewPanel()
// ... 设置面板内容
return panel, nil
}
// 使用 Content 辅助函数创建 Buffalo 处理器
buffaloHandler := Content(handler)
// 注册处理器到 Buffalo 应用
app.GET("/admin", buffaloHandler)
注意事项:
- 处理函数不能为空,必须返回有效的面板或错误
- 处理函数应该是线程安全的,支持并发调用
- 处理函数应该尽快返回,避免阻塞请求
- 处理函数应该正确处理错误,避免 panic
- 处理函数应该避免修改传入的上下文,除非必要