Zajímavé chování isLinkCurrent

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

Zdravím.

Narazil jsem na zajímavé chování metody PresenterComponent::isLinkCurrent().

Sice se tváří, že přijimá jak destinaci, tak volitelně i parametry requestu, ale jak se zdá, tak s nimi nijak nenakládá, neboť ve výsledku se stejně jen testuje jméno presenteru a akce (resp. pak ještě signál, je-li nějaký).

Kvůli tomuto jsem byl nucen použít následující obezličku, abych dosáhl požadovaného:

$test = 'Homepage:default?param=value#anchor';
$tmp = explode('#', $dest); # fragment
$parts = explode('?', $tmp[0]); # parameters

if (isset($parts[1])) {
	parse_str($parts[1], $parts[1]);

} else {
	$parts[1] = array();
}

$path = $presenter->context->httpRequest->getUrl()->getPath();
$isCurrent = $presenter->link($parts[0], $parts[1]) === $path;

Nicméně bych čekal, že bude stačit

$isCurrent = $presenter->isLinkCurrent($test);

když už je možno cílovou akci uvádět v jednom řetězci spolu s parametry, např.

$this->redirect('Homepage:default?param1=val1&param2=val2');

Všiml jsem si TODO v komentáři v odkazovaném zdrojáku, ale nedělám něco špatně?

Děkuji.

MelkorNemesis
Člen | 36
+
0
-

Staci si projit api – https://api.nette.org/…ent.php.html#361.

parametry se davaji do pole druheho argumentu

uestla
Backer | 799
+
0
-

Jasně, ale jak jsem odkazoval, tak v režii vytváření requestu se current flag nastavuje nezávisle na nich, ale i tak díky za reakci.

Filip Procházka
Moderator | 4668
+
0
-

Tohle se nebere v potaz?

uestla
Backer | 799
+
0
-

Oops… Oči mi již dosluhují, omlouvám se.

V tom případě nechápu následující:

// aktuální destinace = Homepage:default?par=val
$presenter->isLinkCurrent('Homepage:default', array()); // TRUE

Resp. chápu, že se neexistence parametru předaného v isLinkCurrent() nebere jako fatální pro určení, že není current… Ale je to tak dobře?

Editoval uestla (11. 3. 2012 13:57)

David Grudl
Nette Core | 8228
+
0
-

Není ten par persistentní?