Kontentga o‘tish

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:

go
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:

go
// 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:

go
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:

go
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:

go
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:

go
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.

  1. Middleware'ni (github.com/goravel/framework/http/middleware::VerifyCsrfToken(exceptPaths)) global yoki ma'lum bir marshrutga ro‘yxatdan o‘tkazing.
  2. CSRF tokenini o‘z ichiga olish uchun ko‘rish faylidagi formangizga <input type="hidden" name="_token" value="{{ .csrf_token }}" /> qo‘shing yoki so‘rov sarlavhangizga X-CSRF-TOKEN={{ .csrf_token }} qo‘shing.
  3. 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:

go
// 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:

go
// 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.

MIT litsenziyasi ostida chiqarilgan