Nette\Schema odstranění nepovinné hodnoty z výsledku´processoru

Spectator
Člen | 48
+
0
-

Ahoj,

$structure = Expect::structure([
	'povinne' => Expect::string()->required(true),
	'nepovinne' => Expect::string()->required(false),
])->castTo('array');

Pokud mi v datech nepřijde ono ‘nepovinne’, tak bych rád nějakým způsobem tuto položku odstranil i z výsledku processoru, aby vůbec ve výsledku nebyla ani jako NULL. Tedy něco jako:

$structure->transform(function ($data) {
	if (!$data['nepovinne']) {
		unset($data['nepovinne']);
	}

	return $data;
});

Teoreticky si umím představit něco jako

// ...
'nepovinne' => Expect::string()->required(false)->castTo('undefined')
// ...

Dá se to nějak nebo na to jdu špatně?

jeremy
Člen | 50
+
+1
-
$structure = Expect::structure([
	'povinne' => Expect::string()->required(true),
	'nepovinne' => Expect::string()->required(false),
])->skipDefaults()->castTo('array');

Dokumentace: Schema – Struktury

Taky by se asi dalo pouzit array_filter() na vysledku processoru, ale tohle je jednodussi.

Edit: Asi taky zalezi na strukture, skipDefaults() na takto jednoduchou strukturu je v pohode, ale pokud chces zanechat defaultni hodnoty krome null, tak by asi bylo vhodnejsi pouzit transform() s array_filter().

$structure = Expect::structure([
	'povinne' => Expect::string()->required(true),
	'nepovinne' => Expect::string()->required(false),
])->castTo('array')->transform(fn($data) => array_filter($data, fn($value) => $value !== null));

Editoval jeremy (12. 3. 14:26)

Spectator
Člen | 48
+
0
-

jeremy napsal(a):

$structure = Expect::structure([
	'povinne' => Expect::string()->required(true),
	'nepovinne' => Expect::string()->required(false),
])->skipDefaults()->castTo('array');

Dokumentace: Schema – Struktury

Taky by se asi dalo pouzit array_filter() na vysledku processoru, ale tohle je jednodussi.

No tak to jsem dobře slepej. Hledám to tam jak divej a tohle přeskočím. Díky moc!