Yii2 比较并突出显示 gridview 中两个字符串或文本之间的差异

Yii2 compare and highlight difference between two strings or text in gridview

有没有办法让它工作? 我一直在寻找解决方案,但没有找到任何相关的东西。如果 StringHelper 有这样的方法就好了! 在 yii2 的某处必须有一个文本差异函数,因为在 gii 中也有一个差异的亮点,不是吗? DiffRendererHtmlInline?这是什么?来自gii。我们能以某种方式利用它吗?

https://github.com/pdjshog/yii2/blob/master/framework/gii/components/Pear/Text/Diff.php

它应该在那里,但我在我的 Yii 中找不到它。 其实yii框架还有其他的:

看起来不错。我们能以某种方式使用它吗?

是的,我们可以。它并不完美,但我可以稍微改变它以满足我的需要。

https://github.com/chrisboulton/php-diff/blob/master/example/example.php

所以它已经存在于 yii 中,您无需安装任何东西。

我已将以下内容添加到 index.php:

require_once \Yii::$app->basePath . '/vendor/phpspec/php-diff/lib/Diff.php';
require_once \Yii::$app->basePath . '/vendor/phpspec/php-diff/lib/Diff/Renderer/Html/InlineMy.php';

嗯,唯一的问题是 none 的输出对我来说真的很完美:文本渲染太少,html 渲染是完整的表格,而在 gridview 中它不是真的很好,所以我将 Inline.php 复制为 InlineMy.php 并删除了所有我不需要的东西:

public function render() {
    $changes = parent::render();
    $html = '';
    if (empty($changes)) {
        return $html;
    }

    foreach ($changes as $i => $blocks) {
        foreach ($blocks as $change) {
            if ($change['tag'] == 'replace') {
                foreach ($change['base']['lines'] as $no => $line) {
                    $html .= '<span style="white-space: nowrap">' . $line . '</span><br>';
                }

                foreach ($change['changed']['lines'] as $no => $line) {
                    $html .= '<span style="white-space: nowrap">' . $line . '</span>';
                }
            }
        }
    }
    return $html;
}

此外,我在父级 (Array.php) 中更改了此设置:

<del> ==> <del style="background-color: red">
<ins> ==> <ins style="background-color: green">

我目前正在使用 SqlDataProvider,所以我的 gridview 看起来与平时有点不同(ActiveDataProvider):

[
    'attribute' => 'diff',
    'value' => function ($row) {
        $diff = new Diff(explode("\n", $row["name"]), explode("\n", $row["name2"]));
        $renderer = new Diff_Renderer_Html_Inline;
        return $diff->render($renderer);
    },
    'format' => 'html',
],

输出:

something <== red

somewhat <== that's actually underlined and green, not bold

我相信有人可以让它更优雅,但以一种快速而肮脏的方式,目前对我来说还不错,因为我不想再构建它了。