在新的Symfony 4或Symfony 5项目中安装twig/extensions

3
我正在准备将一个巨大的网站从Symfony 3.4迁移到Symfony 4.4。为此,我从一个全新的Symfony 4.4安装开始,并且由于最初的项目需要使用Twig扩展,我尝试在这个新的Symfony 4.4项目上安装它。但是,composer指示无法解析您的要求以安装一组软件包
错误信息很明显,但我不明白为什么这种情况会发生在一个全新的Symfony 4.4项目上。
我尝试了以下方法:
  • 我创建了一个新的Symfony应用 symfony new --full --version=lts testproject 安装了Symfony 4.4, 紧接着运行 composer require twig/extensions => 您的要求无法解决为一组可安装的软件包。

  • 我创建了一个新的Symfony应用 symfony new --full testproject 安装了Symfony 5.0,紧接着运行 composer require twig/extensions => 您的要求无法解决为一组可安装的软件包。

  • 我尝试了Symfony flex,但是遇到同样的问题 => 您的要求无法解决为一组可安装的软件包。

    • 清除composer缓存后重试,但没有改变。

以下方案可行: - 我创建了一个新的Symfony应用 symfony new --full --version=3.4 testproject 安装了Symfony 3.4, 紧接着运行 composer require twig/extensions => OK

我知道Symfony 4.4及更高版本会出现依赖冲突的问题,但根据Symfony文档如何编写自定义Twig扩展,不需要采取进一步的操作,它应该可以正常工作。
我错过了什么吗?有人遇到过同样的问题吗?谢谢。

显然,你不应该再急于使用twig/extensions了,因为它很快就会被弃用:https://github.com/twigphp/Twig-extensions/issues/262#issuecomment-561035271 - xarlymg89
2个回答

3
最终,似乎在Symfony 4中创建自定义Twig扩展不再需要运行composer require twig/extensions。 默认情况下,在使用网站骨架构建的新Symfony中,需要一个use Twig\Extension\AbstractExtension;来创建如下所示的twig扩展:
namespace App\Twig;

use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;

class AppExtension extends AbstractExtension
{
    public function getFilters()
    {
        return [
            new TwigFilter('price', [$this, 'formatPrice']),
        ];
    }

    public function formatPrice($number, $decimals = 0, $decPoint = '.', $thousandsSep = ',')
    {
        $price = number_format($number, $decimals, $decPoint, $thousandsSep);
        $price = '$'.$price;

        return $price;
    }
}

2

如果您正在使用Flex,您应该首先安装Twig:

composer req twig

那么,请执行以下操作:
composer require twig/extensions

I hope that help.


1
谢谢您的回答,不幸的是我尝试了您的建议,但情况并没有改变。我仍然无法安装twig/extensions包。 - Grégory C
这可能是一个PHP的要求,尝试安装这个PHP扩展:php-intl,因为Twig扩展是基于它构建的。祝你好运。 - Grola Elmahdi
正确的答案是 - 您不再需要“twig/extensions”。使用Twig\Extension\AbstractExtension来扩展您的自定义扩展。 - Serhii Polishchuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接