LoginSignup
0
1

More than 5 years have passed since last update.

Go - beegoのフラッシュメッセージのデザインを自動適用させる

Posted at

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}}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1