sendJson formátování bez atribut
- r2294743
- Člen | 16
Zdravím, potřebuji nějak zakódovat do json do tohoto formátu:
`{
„results“: [
{
„id“: 1,
„text“: „Option 1“
},
{
„id“: 2,
„text“: „Option 2“
}
],
„pagination“: {
„more“: true
}
}`
bohužel když si vytáhnu data z databáze pomocí fetch pairs poslu to pomocí sendResponse, dostanu něco takového:
{1: „Option1“, 2: „Option2“}
Díky všem za vaše rady
- Mistrfilda
- Člen | 76
Ahoj,
zkus pouzit misto fetchPairs metodu fetchAll, myslim ze json_encode pote vrati presne tento format.
Editoval Mistrfilda (6. 11. 2017 10:44)
- r2294743
- Člen | 16
Zdravím ještě jednou, dokázal jsem to udělat nějak takto. Zajímalo by mě, zda by se to dalo nějak zlehčit posílání pole.
// vytahnout uzivatele z databaze
$users = $this->facade->getAllUsersDetail();
// vytvoreni pole
$userList["items"] = [];
foreach($users as $user)
{
// pole v poli
$userList["items"][] = [
'id' => $user->users_id,
'full_name' => $user->name,
];
}
$this->sendJson($userList);
- h4kuna
- Backer | 740
Ta fasáda co ji používáš, vyrob v ní ještě jednu metodu a ať tu strukturu rovnou vrátí, teď s tím manipuluješ asi v presenteru? Zjednodušení pro presenter, nikoliv pro manipulaci s daty. Jak psal @CZechBoY už to je hodně jednoduché.
<?php
class Facade {
public function getAllUsersDetail()
{
// ...
}
public function prepareJsonAllUsers()
{
// používáš-li nette database a návratový objekt je Selection, píšu z hlavy vyzkoušej
return $this->getAllUsersDetail()->select('id, full_name')->fetchAll();
// původní způsob
$results = [];
foreach($this->getAllUsersDetail() as $user)
{
// pole v poli
$results[] = [
'id' => $user->users_id,
'full_name' => $user->name,
];
}
return $results;
}
}
// presenter
$this->sendJson(['items' => $this->facade->prepareJsonAllUsers()]);
?>
Editoval h4kuna (27. 11. 2017 8:03)