Přidání dodatečných parametrů

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
vitek123
Člen | 5
+
0
-

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.

ViPEr*CZ*
Člen | 817
+
0
-

Chybí Vám tam v masce params.

https://doc.nette.org/…tion/routing#…

vitek123
Člen | 5
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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)

vitek123
Člen | 5
+
0
-

Netuším, cos posledním příspěvkem chtěl říct. Mám pocit, že se nechápeme.

Já se prostě ptám, zda lze pomocí routování přesměrovat url example.com/video (Video presenter bez HTTP parametrů), na nové url example.com/search?params=video (Search presenter s parametrem).

vitek123
Člen | 5
+
0
-

A pakliže to jde, tak jak bz taková routa měla vypadat. Díky.

vvoody
Člen | 910
+
0
-

Ja by som zostal pri tom redirecte, ak by mi zalezalo na celkovej rychlosti webu. Bolo by to asi len zanedbatelne ale aj tak, ta ONE_WAY routa bude asi jedna z prvych cize kazdy jeden request by sa kontrolovalo o routu naviac.

sharkcz
Člen | 28
+
0
-

Poprosil bych někoho zkušeného, zda by odpověděl na #7. Také mě to zajímá.
Ad #9, nejrychlejší by snad mělo být přesměrování za pomocí rout, než spouštění aplikace a volání spousty balastního kódu Nette, než se zavolá můjPresenter->actionDefault(), nebo se pletu?