Persistentní parametr se nepřenáší

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

Mám na svém lokálním serveru:
Nette Framework 2.0 a PHP 5.3

Použil jsem persistentní parametr takto:

Routy:

<?php

// bootstrap.php - nastavení rout

$container->router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$container->router[] = new Route('<presenter>/<action>[/<id>][/<fkey>]', 'Homepage:default');

?>

Presenter:

<?php

// BasePresenter

class BasePresenter extends Nette\Application\UI\Presenter
{
    /**  @persistent */
    public $fkey;
.....

}

?>

Tím jsem si v souladu s dokumentací Nette nastavil „persistentní“ parametr, který by se měl automaticky předávat do všech odkazů generovaných Nette Frameworkem v presenterech poděděných z BasePresenteru (celá aplikace).

Url má tyto části:

  • presenter
  • akce
  • nepovinný parametr id
  • nepovinný parametr fkey

V odkazech na jednotlivé presentery v hlavním menu mám Presenter:default a url vypadají takto:

  • /presenter/

Persistanetní parametr je zadaný natvrdo v tomto odkazu:

  • /presenter/akce/id/fkey

Url v hlavním menu ale neobsahují třetí část url – parametr id a url mají tvar:

  • /presenter/default/fkey

Chybějícím id vzniknou problémy – hodnota fkey se těmito odkazy přenese do id a fkey svoji hodnotu ztratí. Persistentní parametr tedy za těchto okolností persistentní není. Chtělo by to blíže prozkoumat autory frameworku (budou-li mít na to čas) a nějak to ošetřit – buďto zajistit nezrušitelnou vazbu mezi persistentním parametrem a jeho hodnotou v url, nebo na toto upozornit v dokumentaci.

vvoody
Člen | 910
+
+1
-

Problém je v nedomyslenej route. Skús toto

$container->router[] = new Route('<presenter>/<action>[[/<id>]/<fkey>]', 'Homepage:default');