日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Revel教程:Revel 過濾器

過濾器是Revel框架的中間件 – 是組成請(qǐng)求處理管道的獨(dú)立的功能。他們執(zhí)行框架的所有功能。

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括東城網(wǎng)站建設(shè)、東城網(wǎng)站制作、東城網(wǎng)頁制作以及東城網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,東城網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到東城省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

過濾器類型是一個(gè)簡(jiǎn)單的函數(shù):

type Filter func(c *Controller, filterChain []Filter)

每個(gè)過濾器負(fù)責(zé)調(diào)用過濾器鏈中的下一個(gè)過濾器。下面是個(gè)默認(rèn)的過濾器棧:

// Filters 是默認(rèn)的全局過濾器集。
// 可以在程序初始化時(shí)設(shè)置它。
var Filters = []Filter{
    PanicFilter,             // 從恐慌中恢復(fù),并顯示一個(gè)錯(cuò)誤頁面。
    RouterFilter,            // 負(fù)責(zé)解析路由,并選擇正確的控制器方法。
    FilterConfiguringFilter, // 用于添加/刪除每個(gè)動(dòng)作過濾的鉤子。
    ParamsFilter,            // 解析參數(shù)到 Controller.Params 中。
    SessionFilter,           // 恢復(fù)和寫入會(huì)話 cookie。
    FlashFilter,             // 恢復(fù)和寫入 flash cookie。
    ValidationFilter,        // 恢復(fù)保存驗(yàn)證錯(cuò)誤并保存新的Cookie中。
    I18nFilter,              // 解析請(qǐng)求語言。
    InterceptorFilter,       // 執(zhí)行攔截器。
    ActionInvoker,           // 調(diào)用控制器。
}

過濾器鏈配置

全局配置

程序可以在 init() 中重寫 revel.Filters 變量,來配置過濾器鏈 (默認(rèn)在 app/init.go)。

func init() {
    // Filters 是默認(rèn)的全局過濾器集。
    revel.Filters = []Filter{
        PanicFilter,             // 從恐慌中恢復(fù),并顯示一個(gè)錯(cuò)誤頁面。
        RouterFilter,            // 負(fù)責(zé)解析路由,并選擇正確的控制器方法。
        FilterConfiguringFilter, // 用于添加/刪除每個(gè)動(dòng)作過濾的鉤子。
        ParamsFilter,            // 解析參數(shù)到 Controller.Params 中。
        SessionFilter,           // 恢復(fù)和寫入會(huì)話 cookie。
        FlashFilter,             // 恢復(fù)和寫入 flash cookie。
        ValidationFilter,        // 恢復(fù)保存驗(yàn)證錯(cuò)誤并保存新的Cookie中。
        I18nFilter,              // 解析請(qǐng)求語言。
        InterceptorFilter,       // 執(zhí)行攔截器。
        ActionInvoker,           // 調(diào)用控制器。
    }
}

每個(gè)請(qǐng)求沿著過濾器鏈從上到下依次執(zhí)行。

Per-Action configuration

盡管所有的請(qǐng)求都被發(fā)往過濾器鏈 revel.Filters, Revel 也提供了 過濾器配置, 允許開發(fā)者根據(jù)操作或控制器添加、插入、刪除過濾器。

此功能通過 FilterConfiguringFilter 實(shí)現(xiàn), 它本身就是一個(gè)過濾器.

實(shí)現(xiàn)一個(gè)過濾器

保持過濾器鏈能夠依次執(zhí)行

Filters 負(fù)責(zé)依次調(diào)用下一個(gè)過濾器來依次處理請(qǐng)求。這通常需要完成下面的表達(dá)式:

var MyFilter = func(c *revel.Controller, fc []revel.Filter) {
    // .. 做一些預(yù)處理 ..

    fc[0](c, fc[1:]) // 執(zhí)行下一個(gè)過濾器

    // .. 做一些后期處理 ..
}

獲取控制器類型

Filters 接受一個(gè) *Controller 類型的參數(shù), 而不是被調(diào)用的實(shí)際的控制器類型。如果過濾器需要訪問實(shí)際的控制器類型,可以這樣實(shí)現(xiàn):

var MyFilter = func(c *revel.Controller, fc []revel.Filter) {
    if ac, err := c.AppController.(*MyController); err == nil {
        // 判定存在一個(gè) *MyController 實(shí)例...
    }

    fc[0](c, fc[1:]) // 執(zhí)行下一個(gè)過濾器
}

注意:這種模式往往說明攔截器可能是實(shí)現(xiàn)所需功能的好的機(jī)制的一個(gè)指標(biāo)。


網(wǎng)站欄目:創(chuàng)新互聯(lián)Revel教程:Revel 過濾器
文章起源:http://www.dlmjj.cn/article/cdgpjso.html