Cool routa s nazvem misto id + prepis presenteru a akce

medunrad
Člen | 27
+
0
-

Ahoj, řeším problém s rutami, je to pro mě celkem magie.

Mám SearchPresenter, který má metodu renderCompany($id).

Co chci je, aby Search:company $id melo url něco jako vyhledavani/firma/nazev-firmy-id

V routeru mám momentálně aktuální konfiguraci:

$router[] = new Route('search/company/<id>', array(
            'presenter' => array(
                Route::VALUE => 'Search',
                Route::FILTER_TABLE => array(
                    'vyhledavani' => 'Search'
                )
            ),
            'action' => array(
                Route::VALUE => 'company',
                Route::FILTER_TABLE => array(
                    'firma' => 'company'
                )
            ),
            'id' => array(
                Route::FILTER_IN => [$this->routerHelper, 'getIdByUrl'],
                Route::FILTER_OUT => [$this->routerHelper, 'getUrlById']
            )
        ));

Překlad id na název firmy mi funguje, nicméně otatní věci ne.
Vygenerovaná url je ve tvaru /search/company/nazev-firmy-id.
Uplně nerozumím tmu, proč se nepřeloží i presenter a akce.
Budu vděčný za jakoukoli radu.

David Matějka
Moderator | 6445
+
+1
-

ahoj, je to tim, ze ani to „search“ ani „company“ nemas v url jako parametry, tedy jako <presenter> resp <action>, takze nette nevi, kde by to nahradilo.

medunrad
Člen | 27
+
0
-

Super, děkuju. Stačilo uvést presenter a akci jako parametr.

David Matějka napsal(a):

ahoj, je to tim, ze ani to „search“ ani „company“ nemas v url jako parametry, tedy jako <presenter> resp <action>, takze nette nevi, kde by to nahradilo.

medunrad
Člen | 27
+
0
-

Ještě mám jeden doplňující dotaz, který se teď objevil v souvislosti s výše implementovaným routerem.

$router[] = new Route('<presenter>/<action>/<idc>', array(....));

a pod tím mám další routu ve tvaru:

$router[] = new Route('<presenter>/<action>[/<id>]', array(...));

Měl jsem za to, že horní routa se aplikuje pouze na prezentery, které mají jako svůj parametr $idc,
nicméně routa se aplikuje na všechny presentery s akcemi, které přijímají parametr, takže mi aplikace padá, protože se snaží tahat název firmy podle každého id, které příjde jako parametr libovolnému presenteru akci.

Potřeboval bych, aby se horní routa aplikovala pouze na presenter Search a akci company.
Toto je možné?