Po vytvorení routu pre menu nefunkčný registračný link
- NiNu
- Člen | 31
Dobrý deň,
potrebujem poradiť s routovaním. Mám projekt rozdelený na admin a front
modul aj s registráciou (s Acl autorizáciou) a prihlasovaním. Dorobil som
menu, kde položky (pages) si vyťahuje z db, k tomu som prispôsobil
routovanie. Všetko funguje v pohode, len po zmene routovania mi už neidú
ostatné linky ako napr. registrácia (Register:register), alebo prihlasovanie,
písalo chybu no route for HTTP.
Skúsil som do route pridať ďalšie pravidlá:
$router[] = new Route('register/register', 'Front:Register:register');
$router[] = new Route('sign/in', 'Front:Sign:in');
No a teraz mi to vypisuje chybu:
Undefined variable: menu
Môj aktuálny RouteFactory
Menu som vložil do šablóny @layout.latte
<ul class="nav nav-pills">
<li n:foreach="$menu as $slug => $title">
{first}<a n:href="this, 'slug' => NULL" n:class="$presenter->linkCurrent ? active">Home</a>{/first}
{if !$iterator->first}<a n:href="this, 'slug' => $slug" n:class="$presenter->linkCurrent ? active">{$title}</a>{/if}
</li>
</ul>
Skúsil som teda do RegisterPresenteru injectnut PagesRepository, vytiahnuť
z db menu a poslať to do template. Zobrazila sa mi register stránka aj
s menu avšak po kliknutí na položku v menu sa to nikam nepresmerovalo (nič
to nerobilo).
Skúsil som teda aj pages vytiahnuť z db a poslať do template a potom mi to
vyhodilo už ďalšiu chybu:
Invalid argument passed to foreach resp.
Nette\Iterators\CachingIterator; array or Traversable expected,
NULL given.
Ďakujem za každú radu.
- Hafran
- Člen | 121
No mě to příjde, že na těch stránkách to menu prostě nejni. Jakože je ta proměnná prázdná (když je NULL given). Takže jestli ho na registraci atd. nepotřebuješ, tak si tam dej nějakou podmínku IFSET nebo si udělej víc šablon ať ho tam nepoužíváš a jestli ho tam potřebuješ, tak si ho tam musíš korektně poslat – možná jde o to, že tu stránku (registration) to v db nenajde a nemáš to správně ošetřený. Pro začátek si dumpni tu proměnnou menu a koukej proč ti to nevrací co chceš. :)
- NiNu
- Člen | 31
OK, dumpol som premennú menu a tá funguje správne, čiže nesie v sebe
dvojice ($slug ⇒ $title), čo je v pohode.
@Hafran mal si pravdu, tú chybu píše preto, že v db v tabuľke
pages sa stránka registration nenachádza, pretože ju volám cez
Register:register, v tomto prípade som dal premennú page preč keďže
potrebujem len menu.
Teraz keď kliknem na link Register, ukáže mi registračný formulár aj
s menu, ale linky v menu mi vygeneruje v takomto tvare:
/register/register?slug=home
/register/register?slug=about
Preto som rozmýšľal, či by sa dal vytvoriť router len pre túto
špecifickú stránku Register:register, aby mi to generovalo tieto linky ako
/home , /about …
Nech sa snažím ako sa snažím, tak takýto router neviem zostaviť, teda ak
sa to dá.
Ak to inak nepôjde tak spravím novú šablónu pre register bez menu, ale
radšej by som to vyriešil inak.