Nette 2.1 Callback, ako poslat array ako parameter?

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

Caute neviem ako riesit situaciu mam anonimnu funkciu ktora dostava parameter pole. Tuto anonimnu funkciu volam niekde inde v aplikaci cez callback. Problem je v tom ze ked jej poslem pole, tak samozrejme posle len 1 prvok pola, resp. len jeho hodnotu, alebo ked pouzijem func_get_args(), tak mi vrati vsetky prvky pola, ale bez klucov. Neviete mi poradit ako na to?

$control->setCallback(function ($values) {
	$values = func_get_args(); // tu dostanem uz len pole orezane od klucov
	// process values
	return $values;
});
class Foo{

	private $callback;

	public function setCallback($callback)
	{
		$this->callback = $callback;
	}

	private function process(){

		$data = array(
			'key1' => 'value1',
			'key2' => 'value2',
		);

		$callbackData = Callback::invokeArgs($this->callback, $data);
	}
}
enumag
Člen | 2118
+
0
-

Psáno z hlavy…

$control->setCallback(function ($values) {
    // no func_get_args()
    // process values
    return $values;
});

$callbackData = Callback::invoke($this->callback, $data);

Editoval enumag (19. 12. 2013 2:31)

David Matějka
Moderator | 6445
+
0
-

jak pise enumag, nebo

Callback::invokeArgs($this->callback, array($data));

invokeArgs pouziva fci call_user_func_array, kde je jako druhy parametr ocekavano pole s jednotlivymi parametry pro callback. kdyz jsi tam poslal $data, tak to jednotlive prvky bralo jako jednotlive parametry pro ten callback

Callback::invokeArgs($callback, array(1,2,3));
//je identicke jako
Callback::invoke($callback, 1, 2, 3);

Editoval matej21 (19. 12. 2013 2:36)

duskohu
Člen | 778
+
0
-

Jasne, dakujem pani :-) a pozeral som sa na to, a nejako mi to nedoslo :-P