Leaf¶
Leaf to wszechstronny język szablonów ze składnią inspirowaną językiem programowania Swift. Ta biblioteka pozwala generować dynamiczne strony HTML dla przeglądarek oraz np. maile oparte o HTML (tzw. rich emails) do wysyłania za pomocą API.
Biblioteka¶
Pierwszym krokiem do użycia Leaf jest dodanie go jako zależności w projekcie, w pliku manifest managera SPM.
// swift-tools-version:5.2
import PackageDescription
let package = Package(
name: "MyApp",
platforms: [
.macOS(.v10_15)
],
dependencies: [
/// Inne zależności ...
.package(url: "https://github.com/vapor/leaf.git", from: "4.0.0"),
],
targets: [
.target(name: "App", dependencies: [
.product(name: "Leaf", package: "leaf"),
// Inne zależności
]),
// Inne "targety" (cele)
]
)
Konfiguracja¶
Od razu po dodaniu biblioteki do projektu, framework Vapor jest gotowy do jej konfiguracji. Więcej informacji tutaj: configure.swift
.
import Leaf
app.views.use(.leaf)
Powyższy kod ustawia Leaf
jako domyślny język szablonów. Podczas wywołania req.view
, w kodzie zostanie użyty LeafRenderer
.
Warto
Leaf zawiera wewnętrzny system cachowania dla wyrenderowanych stron. Cache
jest wyłączony dla aplikacji w trybie developerskim
- to powoduje, że zmiany w szablonach są widoczne natychmiast. W środowisku produkcyjnym
i innych Cache
jest włączony automatycznie - jakiekolwiek zmiany będą widoczne dopiero po restarcie aplikacji.
Uwaga
Aby umożliwić Leaf znalezienie szablonów kiedy projekt jest otwarty za pomocą Xcode, należy ustawić custom working directory dla Xcode workspace.
Struktura folderów¶
Po skonfigurowaniu Leaf, należy upewnić się czy istnieje folder Views
, w którym są przechowywane szablony .leaf
. Leaf oczekuje szablonów w folderze ./Resources/Views
- relatywnie do root'a projektu.
Do serwowania plików np. Javascript i CSS, bezpośrednio z folderu /Public
przyda się FileMiddleware
.
VaporApp
├── Package.swift
├── Resources
│ ├── Views
│ │ └── hello.leaf
├── Public
│ ├── images (obrazki)
│ ├── styles (zasoby css - style)
└── Sources
└── ...
Renderowanie widoku¶
Teraz, kiedy Leaf jest skonfigurowany, wyrenderujmy pierwszy szablon. W folderze Resources/Views
, stwórz plik o nazwie hello.leaf
z następującą zawartością:
Cześć, #(name)!
Tip
Jeśli korzystasz z VSCode, rekomendowane jest zainstalowanie rozszerzenia do Leaf (Podpowiedzi i podkreślanie składni): Leaf HTML.
Następnie: Dodaj ścieżkę (przeważnie w routes.swift
lub w kontrolerze), żeby wyrenderować widok.
app.get("hello") { req -> EventLoopFuture<View> in
return req.view.render("hello", ["name": "Leaf"])
}
// lub
app.get("hello") { req async throws -> View in
return try await req.view.render("hello", ["name": "Leaf"])
}
Powyższy przykład używa generycznej właściwości view
z obiektu Request
zamiast wywoływać Leaf bezpośrednio. To podejście pozwala używać różnych języków/silników szablonów podczas testów.
Przejdź w przeglądarce pod adres /hello
. Powinien być widoczny napis Hello, Leaf!
. Gratulacje! Właśnie udało Ci się wyrenderować swój pierwszy widok za pomocą Leaf!