Helper plink generuje špatně URL
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Filip Procházka
- Moderator | 4668
Můj bože co to je za úchylárnu :D jestli chceš poradit ukaž definici rout a napiš jaké odkazy to generuje, obrázky jsou na 2 věci
- whipster
- Člen | 17
Bootstrap:
<?php
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
PagePresenter::createRoutes($router);
$router[] = $adminRouter = new \Nette\Application\MultiRouter('Admin');
$adminRouter[] = new Route('admin/[<lang [a-z]{2}>/]<presenter>/<action>[/<id>]',array("presenter"=>"Default", "action"=>"default","lang"=> Environment::getVariable("lang")));
$router[] = new Route('[<lang [a-z]{2}>/]<presenter>/<action>[/<id>]', array("presenter"=>"Homepage","action"=>"default","lang"=> Environment::getVariable("lang")));
/* pagePresenter ... */
public static function createRoutes($router){
foreach (dibi::query("SELECT * FROM pages WHERE status=%s",self::STATUS_ACTIVE) as $page) {
$router[] = new \Nette\Application\Route('[<lang [a-z]{2}>/]'.$page->url,
array( "presenter"=>"Page","action"=>"default","lang"=> $page->lang ? $page->lang :Environment::getVariable("lang"), "url"=>$page->url, "id"=>$page->id));
}
$router[] = new \Nette\Application\Route('[<lang [a-z]{2}>/]page/<action>[/<id>]', array("presenter"=>"Page","action"=>"default","lang"=> Environment::getVariable("lang")));
}
?>
- whipster
- Člen | 17
Samozrejme chapu k cemu jsou routy.
mozna nevim jak udelat lepe routy pro stranky ktere nemaji presentery, ale jsou
definovany v databazi.
ale cekal bych neco konstruktivnejsiho nez ze „nevim k cemu jsou
routy“
I kdyz jsem mozna zvolil spatny navrh, i tak by to melo fungovat ne?
dekuji za konstruktivnejso odezvu
- Ondřej Mirtes
- Člen | 1536
$router[] = new Route('<id>[/<action>]', array(
'lang' => 'cs',
'presenter' =>'Article',
'id' => array(
Route::FILTER_IN => array($articleService, 'getIdBySlug'),
Route::FILTER_OUT => array($articleService, 'getSlugById'),
),
'action' => 'default',
));
- Aurielle
- Člen | 1281
$router[] = new Route('[<lang ...>/]<url .*?>', array(
'presenter' => '...'
'action' => '...',
'lang' => '...',
'url' => array(
Route::FILTER_IN => function($value) { /* funkce filtrující přicházející argumenty třeba proti databázi, pokud neexistuje vrátí se NULL */ },
Route::FILTER_OUT => function($value) { /* to samé, jen pro generování odkazů */ },
Route::VALUE => 'default hodnota, nepovinná',
),
));
Filtry se dají použít třeba i na převádění URL na interní ID a zpět.
- whipster
- Člen | 17
Děkuji za nasměrování
Nahradil jsem konstrukci routy, ale stejně to generuje nesmyslné URL :(
<?php
$router[] = new Route('[<lang [a-z]{2}>/]<page .*?>', array(
'presenter' => 'Page',
'action' => 'default',
'lang' => Environment::getVariable("lang"),
'page' => array(
Route::FILTER_IN => function($value) {
$page = dibi::fetchSingle("SELECT id FROM pages WHERE %and",array("url"=>$value,"status"=> Pages::STATUS_ACTIVE));
if ( $page) return $page;
},
Route::FILTER_OUT => function($value) {
$page = dibi::fetchSingle("SELECT url FROM pages WHERE id=%i",$value);
if ($page) { return $page; }
},
//Route::VALUE => 'defaultValue',
),
));
?>
ale bez výsledku :(
<?php
{plink this} v šabloně vrací "/testApp/document_root/page/"
?>