slim/twig-view

Slim 框架 4 视图助手,基于 Twig 3 模板组件构建

3.4.0 2024-04-28 20:36 UTC

README

Latest Version on Packagist Software License Build Status Coverage Status Total Downloads

这是一个基于 Twig 模板组件构建的 Slim 框架视图助手。您可以使用此组件在 Slim 框架应用程序中创建和渲染模板。

安装

通过 Composer

composer require slim/twig-view

需要 Slim 框架 4、Twig 3 和 PHP 7.4 或更高版本。

用法

使用依赖注入容器

use DI\Container;
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;

require __DIR__ . '/../vendor/autoload.php';

// Create Container
$container = new Container();

// Set view in Container
$container->set(Twig::class, function() {
    return Twig::create(__DIR__ . '/../templates', ['cache' => 'path/to/cache']);
});

// Create App from container
$app = AppFactory::createFromContainer($container);

// Add Twig-View Middleware
$app->add(TwigMiddleware::create($app, $container->get(Twig::class)));

// Add other middleware
$app->addRoutingMiddleware();
$app->addErrorMiddleware(true, true, true);

// Render from template file templates/profile.html.twig
$app->get('/hello/{name}', function ($request, $response, $args) {
    $viewData = [
        'name' => $args['name'],
    ];

    $twig = $this->get(Twig::class);

    return $twig->render($response, 'profile.html.twig', $viewData);
})->setName('profile');

// Render from string
$app->get('/hi/{name}', function ($request, $response, $args) {
    $viewData = [
        'name' => $args['name'],
    ];

    $twig = $this->get(Twig::class);
    $str = $twig->fetchFromString('<p>Hi, my name is {{ name }}.</p>', $viewData);
    $response->getBody()->write($str);

    return $response;
});

// Run app
$app->run();

不使用依赖注入容器

use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;

require __DIR__ . '/../vendor/autoload.php';

// Create App
$app = AppFactory::create();

// Create Twig
$twig = Twig::create('path/to/templates', ['cache' => 'path/to/cache']);

// Add Twig-View Middleware
$app->add(TwigMiddleware::create($app, $twig));

// Define named route
$app->get('/hello/{name}', function ($request, $response, $args) {
    $view = Twig::fromRequest($request);
    return $view->render($response, 'profile.html.twig', [
        'name' => $args['name']
    ]);
})->setName('profile');

// Render from string
$app->get('/hi/{name}', function ($request, $response, $args) {
    $view = Twig::fromRequest($request);
    $str = $view->fetchFromString(
        '<p>Hi, my name is {{ name }}.</p>',
        [
            'name' => $args['name']
        ]
    );
    $response->getBody()->write($str);

    return $response;
});

// Run app
$app->run();

自定义模板函数

TwigExtension 为您的 Twig 模板提供以下函数

  • url_for() - 返回给定路由的 URL。例如:/hello/world
  • full_url_for() - 返回给定路由的 URL。例如:https://www.example.com/hello/world
  • is_current_url() - 如果提供的路由名称和参数对当前路径有效,则返回 true。
  • current_url() - 返回当前路径,包括或不包括查询字符串。
  • get_uri() - 从传入的 ServerRequestInterface 对象返回 UriInterface 对象
  • base_path() - 返回基本路径。

您可以使用 url_for 生成指向任何 Slim 应用程序命名路由的完整 URL,并使用 is_current_url 确定是否需要将链接标记为活动状态,如本示例 Twig 模板所示

<h1>User List</h1>
<ul>
    <li><a href="{{ url_for('profile', { 'name': 'josh' }) }}" {% if is_current_url('profile', { 'name': 'josh' }) %}class="active"{% endif %}>Josh</a></li>
    <li><a href="{{ url_for('profile', { 'name': 'andrew' }) }}">Andrew</a></li>
</ul>

测试

要执行测试套件,您需要克隆存储库并安装依赖项。

$ git clone https://github.com/slimphp/Twig-View
$ composer install
$ composer test

贡献

有关详细信息,请参阅 CONTRIBUTING

安全

如果您发现任何安全相关的问题,请通过电子邮件 [email protected] 而不是使用问题跟踪器。

鸣谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件