germania-kg/twigserviceprovider

Pimple 服务提供者,用于 Twig 模板引擎

2.0.2 2022-05-30 13:39 UTC

README

Pimple 服务提供者,用于 Twig 模板引擎

Packagist PHP version Build Status Scrutinizer Code Quality Code Coverage Build Status

使用 Composer 安装

$ composer require germania-kg/twigserviceprovider

或者,直接将此包添加到您的 composer.json 中:

"require": {
    "germania-kg/twigserviceprovider": "^1.0|^2.0"
}

v2 版本需要 PHP 7.3+ 和从 v2 版本开始使用的 Twig。

设置

请准备好您的 Pimple 依赖容器,并注册 TwigServiceProvider

<?php
use Germania\TwigServiceProvider\TwigServiceProvider;
use Pimple\Container;

$pimple = new Container;
$pimple->register( new TwigServiceProvider );

使用

注册 TwigServiceProvider 后,您可以像这样获取并使用您的 Twig_Environment

<?php
$twig_environment = $pimple['Twig'];
echo $twig_environment->render('template', [ 'foo' => 'bar']);

从本包的 v2 版本开始,配合 Twig v2 及以上版本,这也同样可行

$twig_environment = $pimple[ \Twig\Environment::class ];

……还有更多服务,请参阅 服务部分

配置

默认选项

<?php
$options = array(
	// For Twig's Filesystem Loader (string or array)
	'templates' => '/path/to/templates',

	// The most important Twig Environment options
	'debug' => false,
	'cache' => '/path/to/cache',
	'auto_reload' => true,
	'autoescape'  => false,
	'strict_variables' => false	
);

您可以通过将您想覆盖的选项传递给构造函数或运行时扩展 Twig.Config 服务来细化这些选项

实例化时覆盖

<?php
use Germania\TwigServiceProvider\TwigServiceProvider;

$custom_options = [
	'templates' => [ 
		'/another/path/to/templates',
		__DIR__ . '/vendor/foo/bar/templates'
	],
    'strict_variables' => true
];

$pimple->register( new TwigServiceProvider( $custom_options ));

运行时覆盖

<?php
$pimple->register( new TwigServiceProvider );

$pimple->extend('Twig.Config', function( $defaults, $pimple) {
	return array_merge( $defaults, [
		'templates'  => $pimple['custom.templates'],
		'strict_variables' => getenv('STRICT_ONLY')
	]);
});

其他服务

Twig 选项

默认情况下,Twig_Environment 实例使用“最重要的”选项定义的配置构建——请参阅 配置部分。您还可以添加其他选项,例如:

// @return array
$pimple->extend('Twig.Options', function($options, $pimple) {
	return array_merge($options, [
		'charset' => 'iso-8859-1',
		'optimizations' => 0
	]);
});

Twig.CachePath

// @return string
$pimple->extend('Twig.CachePath', function($old, $pimple) {
	return __DIR__ . '/var/cache';
});

Twig.TemplatePaths

// @return array
$pimple->extend('Twig.TemplatePaths', function($paths, $pimple) {
	return array_merge($paths, [
		'another/one',
		'vendor/name/package/templates'
	]);
});

Twig.Loaders

此服务默认只包含 Twig_Loader_Filesystem 实例;要添加一个或多个其他加载器,请将它们添加到 $loaders 数组中

// @return array
$pimple->extend('Twig.Loaders', function($loaders, $pimple) {
	return array_merge($loaders, [
			new Twig_Loader_Array( [ ... ] )
	]);
});

$loaders 中的所有加载器将通过 Twig 的 Twig_Loader_Chain. 自动链接

有关完整描述,请参阅 Twig 开发者文档

其他服务

所有这些服务返回一个(空)数组,您可以扩展它以包含自定义数据。它们都将添加到 Twig_Environment 中。

// @return array
$pimple->extend( 'Twig.Globals', ... );
$pimple->extend( 'Twig.Filters', ... );
$pimple->extend( 'Twig.Tests', ... );
$pimple->extend( 'Twig.Functions', ... );
$pimple->extend( 'Twig.Extensions', ... );

开发

$ git clone https://github.com/GermaniaKG/TwigServiceProvider.git
$ cd TwigServiceProvider
$ composer install

单元测试

您可以将 phpunit.xml.dist 复制到 phpunit.xml 并根据您的需要进行调整,或者保持不变。运行 PhpUnit 测试或 composer 脚本,例如:

$ composer test
# or
$ vendor/bi