Ko‘rishlar
Kirish
Albatta, marshrutlaringiz va kontrollerlaringizdan to‘liq HTML hujjatlarini to‘g‘ridan-to‘g‘ri qaytarish amaliy emas. Yaxshiyamki, ko‘rishlar barcha HTML kodimizni alohida fayllarga joylashtirishning qulay usulini taqdim etadi. Ko‘rishlar kontroller/dastur mantiqini taqdimot mantiqidan ajratadi va ular resources/views katalogida saqlanadi.
Ko‘rishlarni Yaratish & Ko‘rsatish
Goravelning standart html/template shablonidan foydalanganda, dastur resources/views katalogida .tmpl kengaytmali fayl qo‘shib ko‘rishlarni yaratishingiz mumkin.
// resources/views/welcome.tmpl
{{ define "welcome.tmpl" }}
<html>
<body>
<h1>Salom, {{ .name }}</h1>
</body>
</html>
{{ end }}Ko‘rishni yaratgandan so‘ng, dasturdagi marshrut yoki kontrollerdan ko‘rishni qaytarish uchun View metodidan foydalanishingiz mumkin:
facades.Route().Get("/", func(ctx http.Context) http.Response {
return ctx.Response().View().Make("welcome.tmpl", map[string]any{
"name": "Goravel",
})
})Ichki Ko‘rish Kataloglari
Ko‘rishlar, shuningdek, resources/views katalogining ichki kataloglarida joylashgan bo‘lishi mumkin. Masalan, agar ko‘rishingiz resources/views/admin/profile.tmpl manzilida saqlangan bo‘lsa, uni dasturingizning marshrutlari yoki kontrollerlaridan biridan qaytarishingiz mumkin. E‘tibor bering, ko‘rish quyidagicha define "admin/profile.tmpl" sifatida aniqlanishi kerak:
// resources/views/admin/profile.tmpl
{{ define "admin/profile.tmpl" }}
<h1>Admin paneliga xush kelibsiz</h1>
{{ end }}
ctx.Response().View().Make("admin/profile.tmpl", map[string]any{
"name": "Goravel",
})Mavjud Birinchi Ko‘rishni Yaratish
First metodidan foydalanib, berilgan ko‘rishlar massividagi mavjud birinchi ko‘rishdan foydalanishingiz mumkin. Bu, agar dasturingiz yoki paketingiz ko‘rishlarni sozlash yoki ustidan yozishga imkon bersa, foydali bo‘lishi mumkin:
ctx.Response().View().First([]string{"custom/admin.tmpl", "admin.tmpl"}, map[string]any{
"name": "Goravel",
})Ko‘rish Mavjudligini Aniqlash
Agar ko‘rish mavjudligini aniqlash kerak bo‘lsa, facades.View() metodidan foydalanishingiz mumkin:
if facades.View().Exist("welcome.tmpl") {
// ...
}Ko‘rishlarga Ma'lumot O‘tkazish
Oldingi misollarda ko‘rganingizdek, ko‘rishlarga ma'lumot massivini o‘tkazib, bu ma'lumotni ko‘rish uchun mavjud qilishingiz mumkin. Iltimos, o‘tkazilgan ma'lumot formati ishlatiladigan shablon haydovchisiga qarab o‘zgarishi kerakligini unutmang. Quyidagi misolda standart html/template haydovchisi ishlatilmoqda:
facades.Route().Get("/", func(ctx http.Context) http.Response {
return ctx.Response().View().Make("welcome.tmpl", map[string]any{
"name": "Goravel",
})
})Barcha Ko‘rishlar bilan Ma'lumot Ulashish
Ba'zan, dasturingiz tomonidan ko‘rsatiladigan barcha ko‘rishlar bilan ma'lumot ulashishingiz kerak bo‘lishi mumkin. Buni facades.View() dagi Share funksiyasidan foydalanib amalga oshirishingiz mumkin. Odatda, Share funksiyasiga chaqiruvlarni bootstrap/app.go::WithCallback funksiyasiga joylashtirishingiz kerak:
func Boot() contractsfoundation.Application {
return foundation.Setup().
WithConfig(config.Boot).
WithCallback(func() {
facades.View().Share("key", "value")
}).
Create()
}CSRF Token Middleware
Bu middleware marshrutlarga qo‘llanilishi mumkin, bu esa so‘rovlar autentifikatsiyadan o‘tgan manbalardan kelayotganligini va Saytlararo So‘rov Soxtalashtirish (CSRF) hujumlariga qarshi himoyani ta'minlaydi.
- Middleware'ni (
github.com/goravel/framework/http/middleware::VerifyCsrfToken(exceptPaths)) global yoki ma'lum bir marshrutga ro‘yxatdan o‘tkazing. - CSRF tokenini o‘z ichiga olish uchun ko‘rish faylidagi formangizga
<input type="hidden" name="_token" value="{{ .csrf_token }}" />qo‘shing yoki so‘rov sarlavhangizgaX-CSRF-TOKEN={{ .csrf_token }}qo‘shing. - Middleware forma topshirilganda tokenni avtomatik tekshiradi.
Maxsus Delims va Funksiyalarni Ro‘yxatdan O‘tkazish
Ko‘rishlaringiz ichida ishlatilishi uchun maxsus Delims va funksiyalarni ro‘yxatdan o‘tkazishingiz mumkin, ular http.drivers.*.template konfiguratsiyasida ro‘yxatdan o‘tkazilishi mumkin.
Gin haydovchisi uchun:
// config/http.go
import (
"html/template"
"github.com/gin-gonic/gin/render"
"github.com/goravel/gin"
)
"template": func() (render.HTMLRender, error) {
return gin.NewTemplate(gin.RenderOptions{
Delims: &gin.Delims{
Left: "{{",
Right: "}}",
},
FuncMap: template.FuncMap{
// Maxsus shablon funksiyalarini shu yerda qo‘shing
},
})
},Fiber haydovchisi uchun:
// config/http.go
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template"
"github.com/gofiber/template/html/v2"
"github.com/goravel/framework/support/path"
)
"template": func() (fiber.Views, error) {
engine := &html.Engine{
Engine: template.Engine{
Left: "{{",
Right: "}}",
Directory: path.Resource("views"),
Extension: ".tmpl",
LayoutName: "embed",
// Maxsus shablon funksiyalarini shu yerda qo‘shing
Funcmap: make(map[string]interface{}),
},
}
engine.AddFunc(engine.LayoutName, func() error {
return fmt.Errorf("layoutName called unexpectedly")
})
return engine, nil
},Maxsus Shablon Dvigatellari
Ginning render.HTMLRender interfeysi yoki fiberning fiber.Views interfeysini amalga oshirib, o‘zingizning maxsus shablon dvigatellaringizni yaratishingiz mumkin. Maxsus dvigatelni yaratgandan so‘ng, uni http.drivers.*.template konfiguratsiyasiga ro‘yxatdan o‘tkazishingiz mumkin.
Ilg‘or Xususiyatlar
http/template standart shablon dvigatelidir, ilg‘or xususiyatlar uchun rasmiy hujjatga murojaat qilishingiz mumkin: https://pkg.go.dev/html/template.
