Dájí se schovat prametry v url adrese?
- Jan Kostohryz
- Člen | 14
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 | 1263
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)