mirror of
https://github.com/kataras/iris.git
synced 2025-03-14 08:16:28 +01:00
Fan of the MVC Architectural Pattern?
Former-commit-id: c6e425e8a4b150ea78456b2db88367093c164a38
This commit is contained in:
parent
42b123975c
commit
e2600450f7
97
README.md
97
README.md
|
@ -65,6 +65,7 @@ Iris may have reached version 8, but we're not stopping there. We have many feat
|
||||||
* [Dockerize](https://github.com/iris-contrib/cloud-native-go)
|
* [Dockerize](https://github.com/iris-contrib/cloud-native-go)
|
||||||
* [Community & Support](#-community)
|
* [Community & Support](#-community)
|
||||||
* [Blogs](https://iris-go.com/v8/blogs)
|
* [Blogs](https://iris-go.com/v8/blogs)
|
||||||
|
- [Iris Go vs .NET Core Kestrel in terms of HTTP performance](https://hackernoon.com/iris-go-vs-net-core-kestrel-in-terms-of-http-performance-806195dc93d5)
|
||||||
- [Go vs .NET Core in terms of HTTP performance](https://medium.com/@kataras/go-vs-net-core-in-terms-of-http-performance-7535a61b67b8)
|
- [Go vs .NET Core in terms of HTTP performance](https://medium.com/@kataras/go-vs-net-core-in-terms-of-http-performance-7535a61b67b8)
|
||||||
- [Iris, a modular web framework](https://medium.com/@corebreaker/iris-web-cd684b4685c7)
|
- [Iris, a modular web framework](https://medium.com/@corebreaker/iris-web-cd684b4685c7)
|
||||||
- [Deploying a Iris Golang app in hasura](https://docs.hasura.io/0.14/tutorials/deploying-a-go-iris-app.html)
|
- [Deploying a Iris Golang app in hasura](https://docs.hasura.io/0.14/tutorials/deploying-a-go-iris-app.html)
|
||||||
|
@ -84,33 +85,8 @@ $ go get -u github.com/kataras/iris
|
||||||
|
|
||||||
> _iris_ takes advantage of the [vendor directory](https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo) feature. You get truly reproducible builds, as this method guards against upstream renames and deletes.
|
> _iris_ takes advantage of the [vendor directory](https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo) feature. You get truly reproducible builds, as this method guards against upstream renames and deletes.
|
||||||
|
|
||||||
```go
|
|
||||||
// file: main.go
|
|
||||||
package main
|
|
||||||
import "github.com/kataras/iris"
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
app := iris.New()
|
|
||||||
// Load all templates from the "./templates" folder
|
|
||||||
// where extension is ".html" and parse them
|
|
||||||
// using the standard `html/template` package.
|
|
||||||
app.RegisterView(iris.HTML("./templates", ".html"))
|
|
||||||
|
|
||||||
// Method: GET
|
|
||||||
// Resource: http://localhost:8080
|
|
||||||
app.Get("/", func(ctx iris.Context) {
|
|
||||||
// Bind: {{.message}} with "Hello world!"
|
|
||||||
ctx.ViewData("message", "Hello world!")
|
|
||||||
// Render template file: ./templates/hello.html
|
|
||||||
ctx.View("hello.html")
|
|
||||||
})
|
|
||||||
|
|
||||||
// Start the server using a network address.
|
|
||||||
app.Run(iris.Addr(":8080"))
|
|
||||||
}
|
|
||||||
```
|
|
||||||
```html
|
```html
|
||||||
<!-- file: ./templates/hello.html -->
|
<!-- file: ./views/hello.html -->
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Hello Page</title>
|
<title>Hello Page</title>
|
||||||
|
@ -121,6 +97,75 @@ func main() {
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```go
|
||||||
|
// file: main.go
|
||||||
|
package main
|
||||||
|
import "github.com/kataras/iris"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
app := iris.New()
|
||||||
|
// Load all templates from the "./views" folder
|
||||||
|
// where extension is ".html" and parse them
|
||||||
|
// using the standard `html/template` package.
|
||||||
|
app.RegisterView(iris.HTML("./views", ".html"))
|
||||||
|
|
||||||
|
// Method: GET
|
||||||
|
// Resource: http://localhost:8080
|
||||||
|
app.Get("/", func(ctx iris.Context) {
|
||||||
|
// Bind: {{.message}} with "Hello world!"
|
||||||
|
ctx.ViewData("message", "Hello world!")
|
||||||
|
// Render template file: ./views/hello.html
|
||||||
|
ctx.View("hello.html")
|
||||||
|
})
|
||||||
|
|
||||||
|
// Method: GET
|
||||||
|
// Resource: http://localhost:8080/user/42
|
||||||
|
app.Get("/user/{id:long}", func(ctx iris.Context) {
|
||||||
|
userID, _ := ctx.Params().GetInt64("id")
|
||||||
|
ctx.Writef("User ID: %d", userID)
|
||||||
|
})
|
||||||
|
|
||||||
|
// Start the server using a network address.
|
||||||
|
app.Run(iris.Addr(":8080"))
|
||||||
|
}
|
||||||
|
```
|
||||||
|
<details>
|
||||||
|
<summary>Fan of the MVC Architectural Pattern? Click here</summary>
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "github.com/kataras/iris"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
app := iris.New()
|
||||||
|
app.RegisterView(iris.HTML("./views", ".html"))
|
||||||
|
|
||||||
|
app.Controller("/", new(Controller))
|
||||||
|
|
||||||
|
app.Run(iris.Addr(":8080"))
|
||||||
|
}
|
||||||
|
|
||||||
|
type Controller struct {
|
||||||
|
iris.Controller
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method: GET
|
||||||
|
// Resource: http://localhost:8080
|
||||||
|
func (c *Controller) Get() {
|
||||||
|
c.Data["message"] = "Hello world!"
|
||||||
|
c.Tmpl = "hello.html"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method: GET
|
||||||
|
// Resource: http://localhost:8080/user/42
|
||||||
|
func (c *Controller) GetBy(id int64) {
|
||||||
|
c.Ctx.Writef("User ID: %d", id)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ go run main.go
|
$ go run main.go
|
||||||
> Now listening on: http://localhost:8080
|
> Now listening on: http://localhost:8080
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/kataras/iris"
|
"github.com/kataras/iris"
|
||||||
"github.com/kataras/iris/mvc"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -52,7 +51,7 @@ var myDB = &DB{
|
||||||
// ProfileController our example user controller which controls
|
// ProfileController our example user controller which controls
|
||||||
// the paths of "/profile" "/profile/{id:int}" and "/profile/me".
|
// the paths of "/profile" "/profile/{id:int}" and "/profile/me".
|
||||||
type ProfileController struct {
|
type ProfileController struct {
|
||||||
mvc.Controller // IMPORTANT
|
iris.Controller // IMPORTANT
|
||||||
|
|
||||||
User UserModel `iris:"model"`
|
User UserModel `iris:"model"`
|
||||||
// we will bind it but you can also tag it with`iris:"persistence"`
|
// we will bind it but you can also tag it with`iris:"persistence"`
|
||||||
|
|
|
@ -2,7 +2,6 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/kataras/iris"
|
"github.com/kataras/iris"
|
||||||
"github.com/kataras/iris/mvc"
|
|
||||||
|
|
||||||
"github.com/kataras/iris/middleware/logger"
|
"github.com/kataras/iris/middleware/logger"
|
||||||
"github.com/kataras/iris/middleware/recover"
|
"github.com/kataras/iris/middleware/recover"
|
||||||
|
@ -48,9 +47,8 @@ func main() {
|
||||||
|
|
||||||
// IndexController serves the "/".
|
// IndexController serves the "/".
|
||||||
type IndexController struct {
|
type IndexController struct {
|
||||||
// if you build with go1.9 you can omit the import of mvc package
|
// if you build with go1.8 you have to use the mvc package, `mvc.Controller` instead.
|
||||||
// and just use `iris.Controller` instead.
|
iris.Controller
|
||||||
mvc.Controller
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get serves
|
// Get serves
|
||||||
|
@ -62,7 +60,7 @@ func (c *IndexController) Get() {
|
||||||
|
|
||||||
// PingController serves the "/ping".
|
// PingController serves the "/ping".
|
||||||
type PingController struct {
|
type PingController struct {
|
||||||
mvc.Controller
|
iris.Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get serves
|
// Get serves
|
||||||
|
@ -74,7 +72,7 @@ func (c *PingController) Get() {
|
||||||
|
|
||||||
// HelloController serves the "/hello".
|
// HelloController serves the "/hello".
|
||||||
type HelloController struct {
|
type HelloController struct {
|
||||||
mvc.Controller
|
iris.Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
type myJSONData struct {
|
type myJSONData struct {
|
||||||
|
|
|
@ -6,7 +6,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/kataras/iris"
|
"github.com/kataras/iris"
|
||||||
"github.com/kataras/iris/mvc"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// paths
|
// paths
|
||||||
|
@ -22,7 +21,7 @@ const (
|
||||||
|
|
||||||
// AuthController is the user authentication controller, a custom shared controller.
|
// AuthController is the user authentication controller, a custom shared controller.
|
||||||
type AuthController struct {
|
type AuthController struct {
|
||||||
mvc.SessionController
|
iris.SessionController
|
||||||
|
|
||||||
Source *DataSource
|
Source *DataSource
|
||||||
User Model `iris:"model"`
|
User Model `iris:"model"`
|
||||||
|
|
|
@ -4,15 +4,12 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/kataras/iris"
|
"github.com/kataras/iris"
|
||||||
"github.com/kataras/iris/mvc"
|
|
||||||
|
|
||||||
"github.com/kataras/iris/sessions"
|
"github.com/kataras/iris/sessions"
|
||||||
)
|
)
|
||||||
|
|
||||||
type VisitController struct {
|
type VisitController struct {
|
||||||
// if you build with go1.9 you can omit the import of mvc package
|
iris.SessionController
|
||||||
// and just use `iris.Controller` instead.
|
|
||||||
mvc.SessionController
|
|
||||||
|
|
||||||
StartTime time.Time
|
StartTime time.Time
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,4 +122,8 @@ type (
|
||||||
// the "github.com/kataras/iris/mvc"
|
// the "github.com/kataras/iris/mvc"
|
||||||
// package for machines that have not installed go1.9 yet.
|
// package for machines that have not installed go1.9 yet.
|
||||||
Controller = mvc.Controller
|
Controller = mvc.Controller
|
||||||
|
// SessionController is a simple `Controller` implementation
|
||||||
|
// which requires a binded session manager in order to give
|
||||||
|
// direct access to the current client's session via its `Session` field.
|
||||||
|
SessionController = mvc.SessionController
|
||||||
)
|
)
|
||||||
|
|
12
doc.go
12
doc.go
|
@ -682,7 +682,6 @@ Example Code
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/kataras/iris"
|
"github.com/kataras/iris"
|
||||||
"github.com/kataras/iris/mvc"
|
|
||||||
|
|
||||||
"github.com/kataras/iris/middleware/logger"
|
"github.com/kataras/iris/middleware/logger"
|
||||||
"github.com/kataras/iris/middleware/recover"
|
"github.com/kataras/iris/middleware/recover"
|
||||||
|
@ -720,9 +719,8 @@ Example Code
|
||||||
|
|
||||||
// IndexController serves the "/".
|
// IndexController serves the "/".
|
||||||
type IndexController struct {
|
type IndexController struct {
|
||||||
// if you build with go1.9 you can omit the import of mvc package
|
// if you build with go1.8 you have to use the mvc package, `mvc.Controller` instead.
|
||||||
// and just use `iris.Controller` instead.
|
iris.Controller
|
||||||
mvc.Controller
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get serves
|
// Get serves
|
||||||
|
@ -734,7 +732,7 @@ Example Code
|
||||||
|
|
||||||
// PingController serves the "/ping".
|
// PingController serves the "/ping".
|
||||||
type PingController struct {
|
type PingController struct {
|
||||||
mvc.Controller
|
iris.Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get serves
|
// Get serves
|
||||||
|
@ -746,7 +744,7 @@ Example Code
|
||||||
|
|
||||||
// HelloController serves the "/hello".
|
// HelloController serves the "/hello".
|
||||||
type HelloController struct {
|
type HelloController struct {
|
||||||
mvc.Controller
|
iris.Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get serves
|
// Get serves
|
||||||
|
@ -811,7 +809,7 @@ useful to call middlewares or when many methods use the same collection of data.
|
||||||
|
|
||||||
Optional `EndRequest(ctx)` function to perform any finalization after any method executed.
|
Optional `EndRequest(ctx)` function to perform any finalization after any method executed.
|
||||||
|
|
||||||
Inheritance, recursively, see for example our `mvc.SessionController`, it has the `mvc.Controller` as an embedded field
|
Inheritance, recursively, see for example our `mvc.SessionController/iris.SessionController`, it has the `mvc.Controller/iris.Controller` as an embedded field
|
||||||
and it adds its logic to its `BeginRequest`. Source file: https://github.com/kataras/iris/blob/master/mvc/session_controller.go.
|
and it adds its logic to its `BeginRequest`. Source file: https://github.com/kataras/iris/blob/master/mvc/session_controller.go.
|
||||||
|
|
||||||
Read access to the current route via the `Route` field.
|
Read access to the current route via the `Route` field.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user