Я запускаю небольшую вики-службу, где пользователи могут изменять некоторые столбцы для старых игр NES и SNES. И я веду учет всех изменений. И в течение некоторого времени я смотрел, как stackoverflow представляет изменения и правки, и это выглядит действительно круто и, вероятно, идеально подходит для моего проекта!
Я нашел эту статью из 2018 , которая делает функцию и представить данные действительно красивым способом, вроде stackoverflow. Но я не могу понять, как реализовать это в Laravel 7.7.1 ...
Что я сделал до сих пор:
- Добавьте новую папку с именем
Helpers
в app
-папка. - Создать
Helper.php
Автозагрузить Helper.php
-файл, добавив к composer. json
, "files ": [" app / Helpers / Helper. php "],
Добавьте следующее к Helper.php
:
<?php
function get_decorated_diff($old, $new){
$from_start = strspn($old ^ $new, "\0");
$from_end = strspn(strrev($old) ^ strrev($new), "\0");
$old_end = strlen($old) - $from_end;
$new_end = strlen($new) - $from_end;
$start = substr($new, 0, $from_start);
$end = substr($new, $new_end);
$new_diff = substr($new, $from_start, $new_end - $from_start);
$old_diff = substr($old, $from_start, $old_end - $from_start);
$new = "$start<ins style='background-color:#ccffcc'>$new_diff</ins>$end";
$old = "$start<del style='background-color:#ffcccc'>$old_diff</del>$end";
return array("old"=>$old, "new"=>$new);
}
В GameController
, попытка перебрать старые и новые значения и отредактировать их с помощью новой функции get_decorated_diff()
-helper.
public function show(Game $game)
{
$game->load(['releases','history' => function($q){
return $q->with('user');
}
]);
$diff = $game->history->each(function($history, $key){
get_decorated_diff($history->changed_value_from, $history->changed_value_to);
});
return view('game.game', compact('game'));
}
Ошибка получения из четвертой строки (4) in Helper.php
($from_start = strspn($old ^ $new, "\0");
)
ErrorException Обнаружено нечисловое c значение
Что я делаю не так?
ожидаемый результат
Я пытался прочитать функцию Laravel each()
и, возможно, неправильно ее понял. Но было бы здорово, если бы эти значения просто отредактировали и вернули в представление. Или мне что-то не хватает?