mirror of
https://github.com/kataras/iris.git
synced 2025-01-24 11:11:03 +01:00
100 lines
2.2 KiB
Go
100 lines
2.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
|
||
|
"github.com/kataras/iris"
|
||
|
"github.com/kataras/iris/mvc"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
app := iris.New()
|
||
|
app.RegisterView(iris.HTML("./views", ".html"))
|
||
|
|
||
|
// when we have a path separated by spaces
|
||
|
// then the Controller is registered to all of them one by one.
|
||
|
//
|
||
|
// myDB is binded to the controller's `*DB` field: use only structs and pointers.
|
||
|
app.Controller("/profile /profile/browse /profile/{id:int} /profile/me",
|
||
|
new(ProfileController), myDB) // IMPORTANT
|
||
|
|
||
|
app.Run(iris.Addr(":8080"))
|
||
|
}
|
||
|
|
||
|
// UserModel our example model which will render on the template.
|
||
|
type UserModel struct {
|
||
|
ID int64
|
||
|
Username string
|
||
|
}
|
||
|
|
||
|
// DB is our example database.
|
||
|
type DB struct {
|
||
|
usersTable map[int64]UserModel
|
||
|
mu sync.RWMutex
|
||
|
}
|
||
|
|
||
|
// GetUserByID imaginary database lookup based on user id.
|
||
|
func (db *DB) GetUserByID(id int64) (u UserModel, found bool) {
|
||
|
db.mu.RLock()
|
||
|
u, found = db.usersTable[id]
|
||
|
db.mu.RUnlock()
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var myDB = &DB{
|
||
|
usersTable: map[int64]UserModel{
|
||
|
1: {1, "kataras"},
|
||
|
2: {2, "makis"},
|
||
|
42: {42, "jdoe"},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
// ProfileController our example user controller which controls
|
||
|
// the paths of "/profile" "/profile/{id:int}" and "/profile/me".
|
||
|
type ProfileController struct {
|
||
|
mvc.Controller // IMPORTANT
|
||
|
|
||
|
User UserModel `iris:"model"`
|
||
|
// we will bind it but you can also tag it with`iris:"persistence"`
|
||
|
// and init the controller with manual &PorifleController{DB: myDB}.
|
||
|
DB *DB
|
||
|
}
|
||
|
|
||
|
// Get method handles all "GET" HTTP Method requests of the controller's paths.
|
||
|
func (pc *ProfileController) Get() { // IMPORTANT
|
||
|
path := pc.Path
|
||
|
|
||
|
// requested: /profile path
|
||
|
if path == "/profile" {
|
||
|
pc.Tmpl = "profile/index.html"
|
||
|
return
|
||
|
}
|
||
|
// requested: /profile/browse
|
||
|
// this exists only to proof the concept of changing the path:
|
||
|
// it will result to a redirection.
|
||
|
if path == "/profile/browse" {
|
||
|
pc.Path = "/profile"
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// requested: /profile/me path
|
||
|
if path == "/profile/me" {
|
||
|
pc.Tmpl = "profile/me.html"
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// requested: /profile/$ID
|
||
|
id, _ := pc.Params.GetInt64("id")
|
||
|
|
||
|
user, found := pc.DB.GetUserByID(id)
|
||
|
if !found {
|
||
|
pc.Status = iris.StatusNotFound
|
||
|
pc.Tmpl = "profile/notfound.html"
|
||
|
pc.Data["ID"] = id
|
||
|
return
|
||
|
}
|
||
|
|
||
|
pc.Tmpl = "profile/profile.html"
|
||
|
pc.User = user
|
||
|
}
|