sendJson formátování bez atribut

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
r2294743
Člen | 16
+
0
-

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
+
0
-

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
+
0
-

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);
CZechBoY
Člen | 3608
+
0
-

Prijde mi to hodne jednoduche… Co bys chtel jeste zjednodusit?

h4kuna
Backer | 740
+
0
-

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)

r2294743
Člen | 16
+
0
-

Díky moc za rady. Teprv začínám s nette, ale rád bych se naučil správné návyky při psaní kódu. Vytvářím ted strukturu ve facáde, jak psal H4kuna a beží to perfektne.