Cum să folosești Templ în Goravel
Cum să folosești Templ în framework-ul Goravel

Instaleaza framework-ul si pluginuri

Primul pas este să instalăm Goravel. Este un framework complet cu foarte multe funcții scris în Go pentru programatorii familiari cu framework-ul Laravel.

Pașii din documentația Getting started:

 1// Descarcă framework-ul
 2git clone https://github.com/goravel/goravel.git
 3rm -rf goravel/.git*
 4
 5// Instalează dependențele
 6cd goravel
 7go mod tidy
 8
 9// Crează fișierul .env
10cp .env.example .env
11
12// Generează cheia aplicației
13go run . artisan key:generate

Acum instalează templ pentru randare html și air pentru hot reloading:

1go install github.com/a-h/templ/cmd/templ@latest
2go install github.com/cosmtrek/air@latest

Configurare structură front-end

(încă în lucru - voi actualiza tutorialul cu variabile globale și script push)

• În fișierul /.gitignore adaugă această linie: *_templ.go

• Șterge fișierul resources/views/welcome.tmpl

• Creează 2 foldere în resources/views/ cu numele home și parts

• În folderul resources/views/parts/ creează 3 fișiere:

   1. resources/views/parts/header.templ

1package parts
2
3templ Header() {
4	<h1>Header</h1>
5}

   2. resources/views/parts/footer.templ

1package parts
2
3templ Footer() {
4	<footer>
5		<p>&copy; 2024 MyProject</p>
6	</footer>
7}

   3. resources/views/parts/template.templ

 1package parts
 2
 3templ Template() {
 4	<!DOCTYPE html>
 5	<html>
 6		<head>
 7			<title>My Page</title>
 8			<meta charset="utf-8"/>
 9			<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
10			<meta name="viewport" content="width=device-width, initial-scale=1"/>
11			<!-- Your styles go here -->
12		</head>
13		<body>
14			@Header()
15			{ children... }
16			@Footer()
17			<!-- Your scripts go here -->
18			<script src="//unpkg.com/alpinejs" defer></script>
19		</body>
20	</html>
21}

• Creează componenta de pagină principală: resources/views/home/index.templ

 1package home
 2
 3import "goravel/resources/views/parts"
 4
 5templ Index() {
 6	@parts.Template() {
 7		<h1>Homepage</h1>
 8		<div>Templ is awesome</div>
 9	}
10}

Documentația templ pentru componente copii este aici. Există un exemplu pentru o structură layout dar mie îmi place mai mult metoda cu componentă copil.

Folosește componenta pagina principală în controller

Am facut un fișier app/http/controllers/controller.go unde pot salva cateva funcții ajutătoare care vor fii accesibile din orice controller.

 1package controllers
 2
 3import (
 4	"github.com/a-h/templ"
 5	"github.com/goravel/framework/contracts/http"
 6)
 7
 8func RenderTempl(c http.Context, comp templ.Component) http.Response {
 9	c.Response().Status(200)
10	c.Response().Header("Content-Type", "text/html")
11	comp.Render(c, c.Response().Writer())
12	return nil
13}

Funcția asta randează componenta templ în response buffer cu status http 200 Ok. Acum putem folosii funcția în app/http/controllers/home_controller.go

 1package controllers
 2
 3import (
 4	"goravel/resources/views/home"
 5	"github.com/goravel/framework/contracts/http"
 6)
 7
 8type HomeController struct {
 9	//Dependent services
10}
11
12func NewHomeController() *HomeController {
13	return &HomeController{
14		//Inject services
15	}
16}
17
18func (r *HomeController) Index(ctx http.Context) http.Response {
19	// doing awesome stuff here
20	return RenderTempl(ctx, home.Index())
21}

Acum adaugăm o nouă rută:

 1package routes
 2
 3import (
 4	"goravel/app/http/controllers"
 5	"github.com/goravel/framework/facades"
 6)
 7
 8func Web() {
 9	homeController := controllers.NewHomeController()
10	facades.Route().Get("/", homeController.Index)
11}

Configurare hot reloading folosind Air

Goravel are deja configurația pentru Air în fișierul .air.toml, trebuie doar să adăugăm comanda templ generate în parametrul cmd, ca în exemplu:

1[build]
2  bin = "./storage/temp/main"
3-  cmd = "go build -o ./storage/temp/main ."
4+  cmd = "templ generate && go build -o ./storage/temp/main ."

Dacă lucrezi pe Windows adaugă .exe dupa cuvantul main și pentru parametrul bin și cmd:

1[build]
2  bin = "./storage/temp/main.exe"
3  cmd = "templ generate && go build -o ./storage/temp/main.exe ."

Gata ! Happy coding !


Ultima modificare la 2024-11-18

EN: How to Use Templ With Goravel