Routování – změna separátorů
- TFSi
- Člen | 23
Zdravím,
snad všichni používají adresy typu example.com/abc/def/123,
čemuž odpovídají routy; v pro tuto třeba
$router[] = new Route('<presenter>/<view>/<id>', array(
'presenter' => 'Article',
'view' => 'show',
'id' => NULL,
));
Co když ale chci místo lomítek používat pomlčky – tedy example.com/abc-def-123 Prosté přepsání lomítek v routě mi nefunguje:
$router[] = new Route('<presenter>-<view>-<id>', array(
'presenter' => 'Article',
'view' => 'show',
'id' => NULL,
));
Jakým způsobem tedy modifikovat routu, aby akceptovala url s pomlčkami místo lomítek?
- PetrP
- Člen | 587
Myslím že celý řetezec ‚sežere‘ defaultní pattern pro presenter, který je:
public static $styles = array(
...
'presenter' => array(
self::PATTERN => '[a-z][a-z0-9.-]*',
...
),
...
);
Takže ho možna skusit změnit, ale to by mohlo vyvolat nějaké problemy při přévodu NecoNecoPresenter na neco-neco
- TFSi
- Člen | 23
Ok, tak to zatím nechám a spokojím se s lomítky :)
Ale měl bych ještě jeden dotaz:
Pokud vezmu výše zmíněnou routu
$router[] = new Route('<presenter>/<view>/<id>', array(
'presenter' => 'Article',
'view' => 'show',
'id' => NULL,
));
tak funguje jak http://example.com/abc/ tak http://example.com/abc; no prostě s lomítkem na konci
i bez něho.
Jak tohle co nejelegantněji pořešit aby nevznikaly duplicitní stránky?
- pmg
- Člen | 372
Nette získaný požadavek na presenter převede zpět na URL. Pokud se neshoduje s tou z požadavku, přesměruje na její kanonickou podobu (viz Presenter::canonicalize).
Pokud na konci masky není lomítko a poslední parametr není zadán, bude na konci adresy lomítko. Většinou je to požadované chování.
$router[] = new Route('<lang>/<presenter>/<view>', array(
'presenter' => 'Default',
'view' => 'show',
));
Tato routa bude generovat adresy example.com/cs/
,
example.com/cs/admin/
nebo example.com/cs/admin/edit
.
Pokud adresa končí lomítkem, naznačuje to, že se tam dosadí výchozí
parametr. Když je ale URL kompletní, už se za něj lomítko nedává.
Pro změnu chování se dá upravit router, ptal jsem se na to tady.
- PetrP
- Člen | 587
TFSi napsal(a):
tak funguje jak http://example.com/abc/ tak http://example.com/abc; no prostě s lomítkem na konci i bez něho.
Jak tohle co nejelegantněji pořešit aby nevznikaly duplicitní stránky?
Jestli se ti ale duplicitní stránky vytvářejí (tedy nepřesměrovává se) tak koukni na Presenter::$autoCanonicalize, zda-li ho nemáš někde nastavené na false.