mirror of
https://gitee.com/johng/gf
synced 2026-07-01 03:21:22 +08:00
79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
// Copyright 2017 gf Author(https://github.com/gogf/gf). All Rights Reserved.
|
|
//
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
// If a copy of the MIT was not distributed with this file,
|
|
// You can obtain one at https://github.com/gogf/gf.
|
|
|
|
package ghttp
|
|
|
|
import "reflect"
|
|
|
|
// 中间件对象
|
|
type Middleware struct {
|
|
request *Request
|
|
}
|
|
|
|
// 执行下一个请求流程处理函数
|
|
func (m *Middleware) Next() {
|
|
item := (*handlerParsedItem)(nil)
|
|
for {
|
|
// 是否停止请求执行
|
|
if m.request.IsExited() || m.request.handlerIndex >= len(m.request.handlers) {
|
|
return
|
|
}
|
|
item = m.request.handlers[m.request.handlerIndex]
|
|
m.request.handlerIndex++
|
|
// 通过中间件模式不执行钩子函数
|
|
if item.handler.itemType == gHANDLER_TYPE_HOOK {
|
|
continue
|
|
}
|
|
// 路由参数赋值
|
|
for k, v := range item.values {
|
|
m.request.routerVars[k] = v
|
|
}
|
|
m.request.Router = item.handler.router
|
|
// 执行函数处理
|
|
switch item.handler.itemType {
|
|
case gHANDLER_TYPE_CONTROLLER:
|
|
c := reflect.New(item.handler.ctrlInfo.reflect)
|
|
niceCallFunc(func() {
|
|
c.MethodByName("Init").Call([]reflect.Value{reflect.ValueOf(m.request)})
|
|
})
|
|
if !m.request.IsExited() {
|
|
niceCallFunc(func() {
|
|
c.MethodByName(item.handler.ctrlInfo.name).Call(nil)
|
|
})
|
|
}
|
|
if !m.request.IsExited() {
|
|
niceCallFunc(func() {
|
|
c.MethodByName("Shut").Call(nil)
|
|
})
|
|
}
|
|
case gHANDLER_TYPE_OBJECT:
|
|
if item.handler.initFunc != nil {
|
|
niceCallFunc(func() {
|
|
item.handler.initFunc(m.request)
|
|
})
|
|
}
|
|
if !m.request.IsExited() {
|
|
niceCallFunc(func() {
|
|
item.handler.itemFunc(m.request)
|
|
})
|
|
}
|
|
if !m.request.IsExited() && item.handler.shutFunc != nil {
|
|
niceCallFunc(func() {
|
|
item.handler.shutFunc(m.request)
|
|
})
|
|
}
|
|
case gHANDLER_TYPE_MIDDLEWARE:
|
|
niceCallFunc(func() {
|
|
item.handler.itemFunc(m.request)
|
|
})
|
|
case gHANDLER_TYPE_HANDLER:
|
|
niceCallFunc(func() {
|
|
item.handler.itemFunc(m.request)
|
|
})
|
|
}
|
|
}
|
|
}
|