2015-10-18 2 views
1

Я хочу использовать функции, такие как ->diffForHumans(). Поскольку я пытаюсь получить данные через ajax, я не мог понять, как манипулировать json в javascript, поэтому я решил сделать это на уровне сервера.Манипулирование Json (перед тем как перейти к просмотру)

Мои данные $groups, как:

Group[1]['created_at'] 
Group[2]['created_at'] 
Group[3]['created_at'] 

и я использую return $groups->toJson();, чтобы вернуть его для просмотра.

У меня есть 2 вопроса.

  • Как я могу управлять, чтобы JSON быть в состоянии получить его как created_at еще раз, но с diffForHumans функции()? Поэтому я могу позвонить Group[i]['created_at'] в javascript позже и получить управляемые значения для каждого.

  • Когда я возвращался к обзору лезвия, я смог использовать такие функции, как {{{ (strlen($group->body) > 150) ? substr(($group->body),0,170)."..." : $group->body }}}. Поскольку я использую ajax, я думаю, что лучше также использовать эту функцию на уровне бэкэнд, прежде чем передать ее в json.

Этот подход подходит? Каков наилучший подход к тому, чего я пытаюсь достичь?


Редактировать на мой первый вопрос:

Я могу получить его как dd($groups[2]['created_at']->diffForHumans()); Однако, я не мог заставить его работать на:

foreach($groups as $key=>$group) { 
    dd($group); // collection 
    dd($key); // 0 
    dd($group[$key]); // null 
} 

ответ

1

Вместо того, чтобы пытаться преобразовать объекты в массивы (и, следовательно, потеря коллекции и метод toJson, вы можете использовать метод transform.

$groups->transform(function($item, $key) { 
    $item->created_at = $item->created_at->diffForHumans(); 
    return $item; 
}); 

return $groups->toJson(); 
-1

Я не мог выяснить, как манипулировать json в javascript, поэтому я решил сделать это на уровне сервера

Ваши данные полностью готовы к обработке в вашем Javascript.

Чтобы манипулировать JSON в javascript, сначала вам нужно разобрать строку JSON в объект Javascript. Для этого используйте метод JSON.parse() в своем JS и получите доступ к свойствам объекта, как и к любому другому объекту Javascript.

например.

var groups = JSON.parse(JSONgroups); // JSONgroups is the JSON passed to your view. 

Теперь возможно следующее с groups переменной в вашем Javascript:

groups[1]['created_at'] 

Что касается редактирования: Переменная $groups является коллекция, поэтому для того, чтобы петли через него, вы необходимо будет преобразовать его в массив как таковой:

$groupsArray = $groups->toArray(); 

foreach($groupsArray as $key => $group) { 
    var_dump($group); 
    var_dump($key); 
    var_dump($group[$key]); // not possible since $key is the key to $group hence would return null 
    var_dump($groupsArray[$key]); // use this instead 
} 
+0

Но, тогда я не смогу использовать функции php. – senty

+0

Зачем вам смешивать 'PHP' с кодом' Javascript'? –

+0

Я спрашивал php, и если бы был альтернативный способ использования php-функции, в javascript json я бы с удовольствием узнал. – senty

Смежные вопросы