parisek/twig-attribute

为元素添加属性的 Twig 扩展

v1.4.1 2023-09-24 13:20 UTC

This package is auto-updated.

Last update: 2024-09-24 15:17:19 UTC


README

Twig 缺乏处理 HTML 属性的包装函数。我从 Drupal 中借用了非常棒的 Attribute 类。它能够收集、净化并以良好的方式渲染 HTML 属性。

此包是基于问题 #2664570 - Move Attribute classes under Drupal\Component 创建的,这个问题为在 Drupal 之外使用此类奠定了基础。遗憾的是,由于问题仍然开放,我不得不复制代码。我希望问题能尽快合并,这样我就可以切换到从 Drupal 核心分离出来的官方组件,并正确归属。预期的组件应在 https://github.com/drupal/core-attribute 上提供。

安装

可以使用 composer 容易地安装 Twig Attribute 扩展。

composer require parisek/twig-attribute

用法

$twig = new Twig_Environment($loader);
$twig->addExtension(new Parisek\Twig\AttributeExtension());

要在 symfony 项目中使用,请 将扩展注册为服务

services:
  twig.extension.attribute:
    class: Parisek\Twig\AttributeExtension
    tags:
      - { name: twig.extension }

模板

{% set my_attribute = create_attribute() %}
{%
  set my_classes = [
    'kittens',
    'llamas',
    isKitten ? 'cats' : 'dogs',
  ]
%}
<div{{ my_attribute.addClass(my_classes).setAttribute('id', 'myUniqueId') }}>
  {{ content }}
</div>
<div{{ create_attribute({'class': ['region', 'region--header']}) }}>
  {{ content }}
</div>

示例来自 官方 Drupal 文档

用例