Преобразование данных в строку

Мне нужно конвертировать данные, как это:

{
"action": "PushEvent",
"commits_count": 5,
"repository": {"name":"example-repo"}
}

В строку, как это: пользователь нажал 5 коммитов в пример-репо

Проблема в том, что мне нужно поддерживать очень большое количество типов действий. Как лучше всего решить эту проблему и куда мне поместить код (Laravel)?

0

Решение

Я думаю json_decode это путь, пример:

$source = '{
"action": "PushEvent",
"commits_count": 5,
"repository": {"name":"example-repo"}
}';

$actions = ['PushEvent' => 'pushed'];

$result = json_decode($source, true);

var_dump(sprintf('User %s %d commits to %s', $actions[$result['action']], $result['commits_count'], $result['repository']['name']));
1

Другие решения

Я думаю, что лучше всего положить его в Activity модель (или черта, если вы хотите сохранить модель в чистоте). Для самого метода у вас не будет много других вариантов, кроме реализации каждого действия по отдельности. Может быть, вы можете объединить несколько действий, когда вы используете switch-case, но самой сложной частью, вероятно, будет перевод действия в глагол.

Кроме того, вы также можете поместить его в компонент лезвия. Это имело бы смысл, если вы планируете, чтобы ваши уведомления выглядели красиво, например, если вы посмотрите на следующий HTML

<span class="activity">
<span class="activity-user">User</span> pushed
<span class="activity-count">5</span> commits to
<span class="activity-repository">
<a href="/path/to/example-repo">example-repo</a>
</span>.
</span>

вы заметите, что потом не сможете создать то же самое, если скомпилируете свою деятельность в текстовое предложение.

1

Вы можете попробовать что-то вроде этого

<?php

function convert_multi_array($glue, $arr) {
foreach ($arr as $key => $value) {
if (@is_array($value))
{
$arr[$key] = convert_multi_array ($glue, $arr[$key]);
}
}
return implode($glue, $arr);
}

$json_data = <<<END_OF_JSON
{
"action": "PushEvent",
"commits_count": 5,
"repository": {"name":"example-repo"}
}
END_OF_JSON;

$array_data = json_decode($json_data, true);

$string_data = convert_multi_array(',', $array_data);


echo "<pre>";
print_r($json_data);
print_r($array_data);
echo($string_data);
die();
0
По вопросам рекламы [email protected]