并非所有 twig 扩展都有其专用的 gloal php 函数(我认为主要适用于 3rd 方 twig 扩展),那么如果您使用 symfony 框架,最好的方法是使用自动装配,因为 twig 函数是公共的并且可以通过 php 调用。
就我而言,我想创建一个asset
函数,将远程文件下载到本地文件系统,然后返回可与imagine_filter
过滤器一起使用的本地路径(仅适用于本地图像)
将 twig 类添加到服务 yaml 以在必要时允许自动装配。
services.yaml
services:
Symfony\Bridge\Twig\Extension\AssetExtension: '@twig.extension.assets'
使用可以插入其他扩展的构造函数创建您自己的过滤器过滤器/函数。
<?php
declare(strict_types=1);
namespace App\Twig;
use Symfony\Bridge\Twig\Extension\AssetExtension;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class ImageAssetExtension extends AbstractExtension
{
private AssetExtension $assetExtension;
public function __construct(
AssetExtension $assetExtension,
) {
$this->assetExtension = $assetExtension;
}
public function getFunctions(): array
{
return [
new TwigFunction('asset_image', [$this, 'assetImage']),
];
}
public function assetImage(string $path, string $packageName = null): string
{
// do something more here (like downloading a remote asset and returning the local path)
return $this->assetExtension->getAssetUrl($path, $packageName);
}
}