Pole v predávanom parametri routy

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

Ahojte,
mám problém s jednou routou. Chcem aby link /byty.html smeroval na presenter AdvertListing a predával parameter $categoryId ako pole.
Mám to nastavené takto:

$router[] = new Route('byty[-<listing-paginator-page [0-9]+>].html', [
	'presenter' => 'AdvertListing',
	'action' => 'default',
	'categoryId' => [100]
]);

Presenter vyzerá takto:

public function actionDefault(array $categoryId = [], array $actionId = []);

Routou sa pekne dostanem do prezentera ale $categoryId je prázdne pole. Ak zadefinujem $categoryId ako skalár, tak to funguje. Ale pole sa tam proste nepredá.

Kde by mohol byť problém?

ZahorskyJan
Člen | 59
+
0
-

@mayo router si s polem neporadí. Musíš mu dát skalár. Klidně to může být string ve kterém budeš mít ID oddělená čárkou. V action metodě ale pak musíš udělat explode, aby ses k tomu dostal:

public function actionDefault(string $categoryId)
{
	$categoryId = explode(',', $categoryId);
}
mayo
Člen | 2
+
0
-

ZahorskyJan napsal(a):

@mayo router si s polem neporadí. Musíš mu dát skalár. Klidně to může být string ve kterém budeš mít ID oddělená čárkou. V action metodě ale pak musíš udělat explode, aby ses k tomu dostal:

public function actionDefault(string $categoryId)
{
	$categoryId = explode(',', $categoryId);
}

Toto mi bohužiaľ nepomôže. Presenter dostáva dáta hlavne z formulára na vyhľadávanie, kde môže byť zvolených viac položiek v multiselecte (to mi príde ako pole). Spravím na to teda vlastný router.

ZahorskyJan
Člen | 59
+
0
-

mayo napsal(a):

ZahorskyJan napsal(a):

@mayo router si s polem neporadí. Musíš mu dát skalár. Klidně to může být string ve kterém budeš mít ID oddělená čárkou. V action metodě ale pak musíš udělat explode, aby ses k tomu dostal:

public function actionDefault(string $categoryId)
{
	$categoryId = explode(',', $categoryId);
}

Toto mi bohužiaľ nepomôže. Presenter dostáva dáta hlavne z formulára na vyhľadávanie, kde môže byť zvolených viac položiek v multiselecte (to mi príde ako pole). Spravím na to teda vlastný router.

Nevím jak ti to tam kam jde, ale tak v tom presenteru udělej něco jako

$ids = implode(',', $form['search'])

a nemusíš psát vlastní router.