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>© 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