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 的默认渲染方法:
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 的默认渲染方法:
<?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 集成,并使用它来渲染您的视图。