Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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}}
edo1z
最近はPHPとVue.jsとFirebaseを使うことが多いです
https://twitter.com/edo1z
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away