beegoはフラッシュメッセージが簡単に登録・読み込みできますが、cakePHPみたいなフラッシュメッセージ用のviewが用意されているわけではなく、ただのテキストが読み込めるだけなので、これにHTMLタグをくっつけた状態で自動的に出力できるようにします。
フラッシュメッセージの登録と読み込みの方法
フラッシュメッセージの登録
下記で登録できます。
flash := beego.NewFlash()
flash.Notice("成功しました!")
flash.Store(&c.Controller)
フラッシュメッセージの読み込み
下記を実行することで、c.Data["flash"]にフラッシュメッセージが登録されます。なので、viewで{{.flash.notice}}とかが使えるようになります。
beego.ReadFromRequest(&c.Controller)
自動的にHTMLタグを追加する
テンプレート関数を使います。
package main
import (
"github.com/astaxie/beego"
"fmt"
"html/template"
)
func AddTmplFuncs() {
beego.AddFuncMap("unEscape", unEscape)
beego.AddFuncMap("flash", flash)
}
func unEscape(in string) template.HTML {
return template.HTML(in)
}
func flash(flash map[string]string) template.HTML {
out := ""
color := "blue"
if len(flash) > 0 {
if f, ok := flash["notice"]; ok {
out = f
} else if f, ok = flash["warning"]; ok {
out = f
color = "yellow"
} else {
out = flash["error"]
color = "red"
}
out = fmt.Sprintf(`<div class="ui %s message">%s</div>`, color, out)
}
return unEscape(out)
}
上記のAddTmplFuncs()を、main()内で実行します。
使い方
テンプレート内で下記のように使います。フラッシュメッセージがなければ何も出力されず、あれば、フラッシュメッセージの種類(noticeか、warningかerror)に応じて適切なHTMLタグが追加された状態で出力されます。ちなみに、上記の<div class="ui blue message">
というのは、Semantic UIのメッセージです。unEscape()
というのは、エスケープ処理を無効化してます。
{{.flash | flash}}