data-* 属性不适用于 Yii 2 中的 Html::a()

ome*_*itz 2 custom-data-attribute yii2

我有以下几点:

Html::a('Link', ['some/route'], [
    'class' => 'btn btn-lg btn-primary',    // WORKS
    'style' => 'padding: 100px;',           // WORKS
    'data-id' => 123,                       // DOES NOT WORK
    'data' => [
        'id' => 123,                        // DOES NOT WORK
    ],
]);
Run Code Online (Sandbox Code Playgroud)

根据docs,helper 中的两个指定data-*属性都Html::a应该在 HTML 输出中呈现它们各自的属性,但它们没有,我不明白为什么。

关于renderTagAttributes 的Yii 2 文档还说明了以下内容:

呈现 HTML 标记属性。

值为布尔类型的属性将被视为布尔属性。

不会呈现值为 null 的属性。

属性的值将使用 encode() 进行 HTML 编码。

“data”属性在接收数组值时会被特殊处理。在这种情况下,数组将被“扩展”并呈现一个列表数据属性。例如,如果 'data' => ['id' => 1, 'name' => 'yii'],则将呈现:data-id="1" data-name="yii"。另外 'data' => ['params' => ['id' => 1, 'name' => 'yii'], 'status' => 'ok'] 将呈现为: data-params='{ "id":1,"name":"yii"}' data-status="ok"。


编辑:我正在尝试在GridView列内执行此操作。

ome*_*itz 5

好的,因为我Html::a在GridView列中使用过,所以您必须更改该列的输出格式。html不适用于数据属性,因此您需要切换到raw:

[
    'label' => 'Actions',
    'format' => 'raw',
    'value' => function($model) {
        return Html::a('Link', ['some/route'], [
            'class' => 'btn btn-lg btn-primary',    // WORKS
            'style' => 'padding: 100px;',           // WORKS
            'data-id' => 123,                       // WORKS
            'data' => [
                'id-second' => 123,                 // WORKS
            ],
        ]);
    },
]
Run Code Online (Sandbox Code Playgroud)