有没有办法使它起作用? 我一直在寻找解决方案,但没有发现任何相关性。如果StringHelper具有这样的方法,那就太好了! yii2的某个地方必须有一个文本差异函数,因为在gii中也有一个突出的区别,不是吗? DiffRendererHtmlInline?这是什么?是来自gii。我们可以以某种方式利用它吗?
https://github.com/pdjshog/yii2/blob/master/framework/gii/components/Pear/Text/Diff.php
它应该在那里,但我在Yii中找不到它。 实际上,yii框架中还有其他功能:
看起来不错。我们可以以某种方式使用它吗?
答案 0 :(得分:0)
是的,我们可以。它不是完美的,但是我可以根据自己的需要进行一些更改。
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';
唯一的问题是,没有一个输出对我而言真的是完美的:文本渲染太少,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',
],
输出:
一些
东西<==红色一些内容 <==实际上是带下划线的绿色,而不是粗体
我敢肯定,它可以变得更优雅,但是以一种快速又肮脏的方式对我来说现在很好,因为我不想再制造它了。