Je možné v komponentě zachovat parametry presenteru?

Phalanx
Člen | 310
+
+1
-

Narazil jsem na zajímavou výzvu – potřebuju zachovat parametry URL v zanořené komponentě.

tzn. mám presenter – komponenta A – komponenta B – komponenta C

V komponentě C vykresluju standartní link na signál

<?php
<a href="{link export!}">export</a>
?>

což vytvoří jenom ?do=someComponent-export
a já bych potřeboval zachovat předchozí url, např. ?a=1&do=someComponent-export

Parametry jsou proměnlivé:
?userId=1
?login=abc&surname=abc&from=2017

@DavidMatějka pěkně popsal chování:
https://forum.nette.org/…y-presenteru#…

Hm, dokumentace neni uplne presna. Prenaseji se

  • persistetni parametry vzdy (respektive pokud spadaji do scope)
  • v pripade odkazovani na this (coz je fakticky i signal) se prenaseji parametry uvedene v prislusne action*, resp render* > metode v presenteru.

v tvem pripade tedy pridej do metody renderOrderDetail parametr $id

Jenže kvůli variabilitě odkazů nemůžu použít persistentní parametr ani pouze předat jeden parametr.

V tomto vlákně jsem ještě našel možnost použití loadState, ale žádný parametr mi to nezachovalo.
https://forum.nette.org/…v-paginatoru#…

<?php
public function loadState(array $params)
{
    parent::loadState($params);
}
?>

Editoval Phalanx (25. 5. 2018 9:44)

Pavel Kravčík
Člen | 1180
+
0
-

Buď více persistentních parametrů (s tím že je budeš „nullovat“) nebo můžeš pro přenášení důležitých údajů využít něco jiného než URL. Třeba sessions.

Phalanx
Člen | 310
+
0
-

@PavelKravčík Díky za pomoc. Taky jsem si říkal, že asi budu muset použít sessions. Nakonec jsem si uvědomil, proč si vlastně nenapíšu jen filtr na url pro tento specifický případ. Už to funguje tak jak potřebuju :)

<?php
// v komponentě do render metody
$template->getLatte()->addFilter('addparams', [ $this, 'addParamsToUrl' ]);

// v šabloně
<a href="{link export!|addparams: $filterParams}">export</a>

// v komponentě
	public function addParamsToUrl($url, $params)
	{
		$url = new Url($url);
		if (!empty($params)) {
			foreach($params as $key => $val) {
				if ($key != 'do') {
					$url->appendQuery("{$key}={$val}");
				}
			}
		}

		return $url;
	}
?>