Dájí se schovat prametry v url adrese?

Jan Kostohryz
Člen | 14
+
0
-

Zdravím,
chtěl bych se zeptat jestli se v nette dají schovat paramtery v url adresách. Protože mé url adresy vypadají nějak takto:

htp://localhost:8000/Kategorie?category_id=3&category_title=Hry+na+hřiště

Tak jestli se to dá předělat na toto:

htp://localhost:8000/Kategorie/hry-na-hriste

Je to možné?
Když ak se omlouvám jestli je to hloupý dotaz. V dokumentaci jsem nic takového nenašel a jsem nováček v nette.

Marek Bartoš
Nette Blogger | 1146
+
0
-

Definuješ si routu ve formátu který potřebuješ. Ta bude obsahovat proměnnou slug a na který presenter vede, například App\FrontModule\Presenters\CategoriesPresenter s akcí default

$list[] = new Route('/Kategorie/<slug>', 'Front:Categories:default');

V presenteru pak najdeš kategorii podle proměnné $slug (název parametru v presenteru a routě je shodný)

public function actionDefault(string $slug): void {
	$category = $this->categoryRepository->findBySlug($slug);
}

Slug je identifikátor, který se použije pro kategorii v url adrese, musí být tedy unikátní a uložený v databázi. Za předpokladu, že se dvě kategorie nebudou jmenovat stejně jej vyrobíš takto $slug = Strings::webalize($title);


Obecně vzato, pokud chceš parametr v cestě a ne v query, tak je stačí uvést v url adrese. Pokud ti stačí formát http://localhost:8000/Kategorie/3/Hry+na+hřiště, tak v routě bude:

$list[] = new Route('/Kategorie/<category_id>/<category_title>', 'Front:Categories:default');

Editoval Marek Bartoš (30. 10. 2021 19:08)