Přidání dodatečných parametrů
- vitek123
- Člen | 5
Zdravíčko,
poprosil bych o radu. Snažím se pomocí této routy
$router[] = new \Nette\Application\Route(
‚<locale>/<presenter video>/<action
default>/[<adult>/]‘,
array(
‚module‘ ⇒ $module,
‚presenter‘ ⇒ ‚Search‘,
‚action‘ ⇒ ‚default‘,
‚params‘ ⇒ video
)
);
docílit předání HTTP parametru ?params=video, ale tento parametr se nepředá. Dělám něco špatně, nebo to Nette neumí? Používám verzi 2.0.
- vitek123
- Člen | 5
O to mi právě jde, potřebuju přeroutovat starou url http://example.com/video na novou url http://example.com/search?….
Routa by tedy mohola vypadat takto,
<?php
$router[] = new \Nette\Application\Route(
'<locale>/<presenter video>/<action>/[<adult>/][<userChannelList>/]',
array(
'module' => $module,
'presenter' => array(
\Nette\Application\Route::FILTER_TABLE => array(
'video' => 'Search',
),
),
'action' =>'default',
'params' => 'video',
),
\Nette\Application\Route::ONE_WAY
);
?>
Správně přeroutuje na Search presenter, ale bez parametru params.
Editoval vitek123 (19. 6. 2012 15:10)
- bojovyletoun
- Člen | 667
Nějak nerouzumím co přesně chceš. Co má být statický text, co
presenter. co v querystringu…
Přečetl jsi si v tom článku část o routování querystringu (například
v adrese může být ?nazev=hodnota, ale přitom nastevit, že půjde
o parametr nazevjiny)? (je to pár řádků nad
nadpisem kolekce rout)
je třeba toto správně?
$router[] = new \Nette\Application\Route(
'search ? params=<video>', // v url bude search?params=klausToUkradl
array(
'module' => $module,
'presenter' => 'Search' //spustí presenter Search
'action' =>'default',
//s parametrem video=>klaus
),
\Nette\Application\Route::ONE_WAY
);
?>
- vitek123
- Člen | 5
Potřebuju, aby po zadání starého url example.com/video (Video presenter), které nemá žádné HTTP parametry a vypisuje seznam videí, došlo k přesměrování na nové url example.com/search?params=video (Search presenter). Tedy aby router doplnil nezadaný parametr „params=video“.
Tvůj návrh pouze přejmenuje „params“ na „video“ u Search presenteru. Já potřebuju, aby přesměroval z Video presenteru na Search presenter a doplnil chybějící HTTP parametr „params“ s hodnotou „video“.
Abych to ještě lépe popsal. Nyní jsem to obešel takto:
<?php
final class VideoPresenter
{
public function renderDefault()
{
$this->redirect('Search:', array('params' => 'video');
$this->terminate();
}
}
?>
Ale rád bych se úplně zbavil zastaralého VideoPresenteru a přesměrování nechal na routeru, pakliže je to možné.
Každopádně děkuju za ochotu a čas.
- bojovyletoun
- Člen | 667
Tady mám něco.
Mám takové otázky: proč routingpanel nezobrazí „may“ u routy
„video“. Proč se kanolizace provádí až po akci?
<?php
require "nette.php";
\Nette\Diagnostics\Debugger::enable(false, false);
$a = new Nette\Config\Configurator;
$cont = $a->setTempDirectory('temp')->createContainer();
class SearchPresenter extends Nette\Application\UI\Presenter
{
function beforeRender()
{
dump($this->request);
$this->terminate();
}
}
echo "<a href='search'>link</a> ";
echo "<a href='search?params=video'>link</a> ";
echo "<a href='search?params=videoa'>link</a> ";
echo "<a href='video'>link</a> ";
$r = $cont->router;
$r[] = new Nette\Application\Routers\Route('search', "Search:default");
$r[] = new Nette\Application\Routers\Route('video', array(
"presenter" => "Search",
"action" => "default",
"params" => "video"
));
$r[] = new Nette\Application\Routers\Route("[index.php]", function () {
});
$cont->application->run();
Editoval bojovyletoun (19. 6. 2012 21:36)