Cool route jednodše předání pole které se nahradí
- joseff
- Člen | 233
Ahoj, existuje nějaká route kde předám pole hodnot a ta se prostě aplikuje, například:
array(
'news.news' => 'novinky',
'news.page/default/4133' => 'novinka-jedna',
'news.page/default/4145' => 'novinka-dva',
)
Atd, koukal jsem na routy, ale moc moudrý z toho nejsem přitom mi přijde, že tohle musí řešit každý druhý. Díky
- CZechBoY
- Člen | 3608
Co tohle vlastně dělá?
Máš dvě coolurl a jak z toho má aplikace poznat, co se má provést?
Přečti si třeba tenhle návod jak v aplikaci udělat coolurl pro
články:
http://zlml.cz/…te-prakticky#…
Editoval CZechBoY (12. 12. 2015 22:21)
- joseff
- Člen | 233
No prostě chci aby bylo v url toto: www.mojedomena.cz/novinka-jedna a teď tam mám toto: www.mojedomena.cz/…default/4145 ale ty řešení co jsem našel vždy řeší nějaké složitosti a takto jednoduchý případ jsem nikde nedohledal… i v tom odkazu :-(
- F.Vesely
- Člen | 369
Takhle (jak pises v prvnim prispevku) se to nedela. Do tabulky, kde mas ulozene novinky, si pridas dalsi sloupecek slug, ktery byl mel byt jedinecny a do nej si budes ukladat to novinka-jedna, novinka-dva, atd. Ja tam vetsinou ukladam nazev te novinky, ktery prozenu pres webalize + nejak si ohlidam, aby to bylo jedinecne.
Dalsi cast je ta, ze musis nejak prevest id novinky na slug a slug na id a to presne se resi v odkazovanem clanku od Martina Zlamala.
- Pavel Janda
- Člen | 977
Tedy: zde je ukázková RouterFactory:
<?php
namespace App;
use Nette;
use Nette\Application\Routers\RouteList;
use Nette\Application\Routers\Route;
class RouterFactory
{
private $urls = [
'novinka-jedna' => [
'presenter' => 'Homepage',
'action' => 'detail',
'id' => '4145',
]
];
/**
* @return Nette\Application\IRouter
*/
public function createRouter()
{
$router = new RouteList;
//$router[] = new Route('<url>', 'Homepage:default');
$router[] = new Route('[<url [a-z-0-9\/]+?>]', [
NULL => [
Route::FILTER_IN => [$this, 'urlIn'],
Route::FILTER_OUT => [$this, 'urlOut']
]
]);
return $router;
}
public function urlIn($params)
{
$url = trim($params['url'], '/');
if (isset($this->urls[$url])) {
return $this->urls[$url];
}
return NULL;
}
public function urlOut($params)
{
foreach ($this->urls as $url => $url_params) {
if ($params == $url_params) {
return ['url' => $url];
}
}
return NULL;
}
}
A zde config.neon:
services:
- App\RouterFactory
router: @App\RouterFactory::createRouter
Ale jak psal F.Vesely, je vhodné ukládat si informace o slugu do databáze, nebo nějak stranou. Tahle RouterFactory ti to snad pomůže rozchodit.
Editoval Pavel Janda (13. 12. 2015 11:25)
- David Kudera
- Člen | 455
Pokud potřebuješ jen takhle jednoduše vytvořit adresy, tak bude možná lepší a jednodušší použít static-router . Jako bonus je i o něco rychlejší, než defaultní nette router.
Edit: ale neumí pracovat s parametry ;-)
Editoval David Kudera (14. 12. 2015 0:04)