mirror of
https://github.com/kataras/iris.git
synced 2025-12-29 15:57:09 +00:00
Nothing special here, just split the static handler to a package-level func and per-route func (same as before)
Former-commit-id: 1912d85de84856c715dfa7b79d771cada1b638b9
This commit is contained in:
48
adaptors/view/_examples/custom_renderer/main.go
Normal file
48
adaptors/view/_examples/custom_renderer/main.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
"gopkg.in/kataras/iris.v6"
|
||||
"gopkg.in/kataras/iris.v6/adaptors/httprouter"
|
||||
)
|
||||
|
||||
func main() {
|
||||
app := iris.New()
|
||||
// output startup banner and error logs on os.Stdout
|
||||
app.Adapt(iris.DevLogger())
|
||||
// set the router, you can choose gorillamux too
|
||||
app.Adapt(httprouter.New())
|
||||
|
||||
// Custom Render Policy to override or create new content-type render
|
||||
// i,e: "text/html" with a prefix,
|
||||
// we will just write to the writer and return false
|
||||
// to continue to the next contentType-matched renderer if any.
|
||||
app.Adapt(iris.RenderPolicy(func(out io.Writer, contentType string, binding interface{}, options ...map[string]interface{}) (bool, error) {
|
||||
|
||||
if contentType == "text/html" {
|
||||
if content, ok := binding.(string); ok {
|
||||
out.Write([]byte("<pre>My Custom prefix</pre><br/>" + content))
|
||||
}
|
||||
|
||||
}
|
||||
// continue to the next, no error
|
||||
// note: if we wanted to stop here we would return true instead of false.
|
||||
return false, nil
|
||||
}))
|
||||
|
||||
app.Get("", func(ctx *iris.Context) {
|
||||
|
||||
// These content-types are not managed by our RenderPolicy:
|
||||
// text, binary and html content-types are
|
||||
// not rendered via serializers, you have to
|
||||
// use the ctx.Render functions instead.
|
||||
// so something like this:
|
||||
// ctx.Text(iris.StatusOK, "my text content body here!")
|
||||
// will NOT work with out custom render policy.
|
||||
ctx.Render("text/html",
|
||||
"my text content body here!")
|
||||
})
|
||||
|
||||
app.Listen(":8080")
|
||||
}
|
||||
@@ -55,39 +55,5 @@ func main() {
|
||||
|
||||
})
|
||||
|
||||
// ------ first customization without even the need of *Context or a Handler--------
|
||||
//
|
||||
// Custom new content-/type:
|
||||
// app.Adapt(iris.RenderPolicy(func(out io.Writer, name string, binding interface{}, options ...map[string]interface{}) (error, bool) {
|
||||
// if name == "customcontent-type" {
|
||||
//
|
||||
// // some very advanced things here:
|
||||
// out.Write([]byte(binding.(string)))
|
||||
// return nil, true
|
||||
// }
|
||||
// return nil, false
|
||||
// }))
|
||||
//
|
||||
// app.Get("/custom", func(ctx *iris.Context) {
|
||||
// ctx.RenderWithStatus(iris.StatusOK, // or MustRender
|
||||
// "customcontent-type",
|
||||
// "my custom content here!",
|
||||
// )
|
||||
// })
|
||||
//
|
||||
// ---- second -----------------------------------------------------------------------
|
||||
//
|
||||
// Override the defaults (the json,xml,jsonp,text,data and so on), an existing content-type:
|
||||
// app.Adapt(iris.RenderPolicy(func(out io.Writer, name string, binding interface{}, options ...map[string]interface{}) (error, bool) {
|
||||
// if name == "text/plain" {
|
||||
// out.Write([]byte("From the custom text/plain renderer: " + binding.(string)))
|
||||
// return nil, true
|
||||
// }
|
||||
//
|
||||
// return nil, false
|
||||
// }))
|
||||
// // the context.Text's behaviors was changed now by your custom renderer.
|
||||
//
|
||||
|
||||
app.Listen(":8080")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user