HTML 뷰 및 템플릿
Flight는 기본적으로 일부 기본 템플릿 기능을 제공합니다.
Flight는 기본 뷰 엔진을 자신의 뷰 클래스를 등록하여 간단하게 교체할 수 있게 해줍니다. Smarty, Latte, Blade 등을 사용하는 방법에 대한 예제를 보려면 아래로 스크롤하세요!
내장 뷰 엔진
뷰 템플릿을 표시하려면 템플릿 파일의 이름과 선택적 템플릿 데이터를 render
메서드로 호출합니다:
Flight::render('hello.php', ['name' => 'Bob']);
전달하는 템플릿 데이터는 자동으로 템플릿에 주입되며 지역 변수처럼 참조할 수 있습니다. 템플릿 파일은 단순히 PHP 파일입니다. hello.php
템플릿 파일의 내용이 다음과 같다면:
Hello, <?= $name ?>!
출력은 다음과 같습니다:
Hello, Bob!
set 메서드를 사용하여 뷰 변수를 수동으로 설정할 수도 있습니다:
Flight::view()->set('name', 'Bob');
name
변수는 이제 모든 뷰에서 사용할 수 있습니다. 따라서 간단히 다음과 같이 하면 됩니다:
Flight::render('hello');
render 메서드에서 템플릿의 이름을 지정할 때 .php
확장자를 생략할 수 있습니다.
기본적으로 Flight는 템플릿 파일을 위한 views
디렉터리를 찾습니다. 다음 설정을 통해 템플릿에 대한 대체 경로를 설정할 수 있습니다:
Flight::set('flight.views.path', '/path/to/views');
레이아웃
웹사이트에는 일반적으로 교환 가능한 내용을 가진 단일 레이아웃 템플릿 파일이 있습니다. 레이아웃에서 사용할 내용을 렌더링하려면 render
메서드에 선택적 매개변수를 전달할 수 있습니다.
Flight::render('header', ['heading' => 'Hello'], 'headerContent');
Flight::render('body', ['body' => 'World'], 'bodyContent');
이제 뷰에는 headerContent
및 bodyContent
라는 변수들이 저장됩니다. 그런 다음 다음과 같이 레이아웃을 렌더링할 수 있습니다:
Flight::render('layout', ['title' => 'Home Page']);
템플릿 파일이 다음과 같이 보인다면:
header.php
:
<h1><?= $heading ?></h1>
body.php
:
<div><?= $body ?></div>
layout.php
:
<html>
<head>
<title><?= $title ?></title>
</head>
<body>
<?= $headerContent ?>
<?= $bodyContent ?>
</body>
</html>
출력은 다음과 같습니다:
<html>
<head>
<title>Home Page</title>
</head>
<body>
<h1>Hello</h1>
<div>World</div>
</body>
</html>
Smarty
다음은 Smarty 템플릿 엔진을 뷰에서 사용하는 방법입니다:
// Smarty 라이브러리 로드
require './Smarty/libs/Smarty.class.php';
// Smarty를 뷰 클래스로 등록
// Smarty를 로드할 때 구성하는 콜백 함수도 전달
Flight::register('view', Smarty::class, [], function (Smarty $smarty) {
$smarty->setTemplateDir('./templates/');
$smarty->setCompileDir('./templates_c/');
$smarty->setConfigDir('./config/');
$smarty->setCacheDir('./cache/');
});
// 템플릿 데이터 할당
Flight::view()->assign('name', 'Bob');
// 템플릿 표시
Flight::view()->display('hello.tpl');
완전성을 위해 Flight의 기본 render 메서드를 오버라이드하는 것도 잊지 마세요:
Flight::map('render', function(string $template, array $data): void {
Flight::view()->assign($data);
Flight::view()->display($template);
});
Latte
다음은 Latte 템플릿 엔진을 뷰에서 사용하는 방법입니다:
// Latte를 뷰 클래스로 등록
// Latte를 로드할 때 구성하는 콜백 함수도 전달
Flight::register('view', Latte\Engine::class, [], function (Latte\Engine $latte) {
// 여기서 Latte는 템플릿 캐싱을 통해 성능을 높입니다
// Latte의 한 가지 멋진 점은 템플릿을 변경할 때 자동으로 캐시를 새로 고친다는 것입니다!
$latte->setTempDirectory(__DIR__ . '/../cache/');
// 뷰의 루트 디렉터리가 어디에 있을지를 Latte에 알려줍니다.
$latte->setLoader(new \Latte\Loaders\FileLoader(__DIR__ . '/../views/'));
});
// Flight::render()를 올바르게 사용하기 위해 포장합니다
Flight::map('render', function(string $template, array $data): void {
// 이는 $latte_engine->render($template, $data)와 같습니다.
echo Flight::view()->render($template, $data);
});
Blade
다음은 Blade 템플릿 엔진을 뷰에서 사용하는 방법입니다:
먼저, Composer를 통해 BladeOne 라이브러리를 설치해야 합니다:
composer require eftec/bladeone
그런 다음, Flight에서 BladeOne을 뷰 클래스로 구성할 수 있습니다:
<?php
// BladeOne 라이브러리 로드
use eftec\bladeone\BladeOne;
// BladeOne을 뷰 클래스로 등록
// BladeOne을 로드할 때 구성하는 콜백 함수를 전달
Flight::register('view', BladeOne::class, [], function (BladeOne $blade) {
$views = __DIR__ . '/../views';
$cache = __DIR__ . '/../cache';
$blade->setPath($views);
$blade->setCompiledPath($cache);
});
// 템플릿 데이터 할당
Flight::view()->share('name', 'Bob');
// 템플릿 표시
echo Flight::view()->run('hello', []);
완전성을 위해 Flight의 기본 render 메서드를 오버라이드하는 것도 잊지 마세요:
<?php
Flight::map('render', function(string $template, array $data): void {
echo Flight::view()->run($template, $data);
});
이 예제에서 hello.blade.php 템플릿 파일은 다음과 같이 보일 수 있습니다:
<?php
Hello, {{ $name }}!
출력은 다음과 같습니다:
Hello, Bob!
이 단계를 따르면 Blade 템플릿 엔진을 Flight와 통합하고 이를 사용하여 뷰를 렌더링할 수 있습니다.