IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Laravel routing

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Lava
Člen
Avatar
Lava:4.5.2016 22:15

Riešim zaujímavý problém v Laraveli v routingu. Okrem iného budem mať vo webovej aplikácií aj statické stránky, to znamená, že čisto text, ktorý je uložený v databázi. Potrebujem vymyslieť taký Route:: ktorý by rátal s tým, že pokiaľ bude v adrese slovo "page" tak má spustiť StaticPageCon­troller@index().

V databáze mám tabuľku "pages", v ktorej sú stlpce:

  • page_id-> 1
  • author_id (nepodstatné) -> 1
  • title (názov statickej stránky) -> Podmienky použitia
  • seo_title (na základe toho sa to bude párovať v DB) -> podmienky-pouzitia
  • content (samotný obsah) -> Lorem Ipsum dolor sit amet... bla bla
  • created_at (timestamp)
  • updated_at (timestamp)

URL bude vyzerať napríklad takto

www.mojprojekt.eu/page/podmienky-pouzitia

Môj route.php aktuálne vyzerá takto

// Static pages
Route::get('/page/{seo_title}', 'StaticPageController@index');

Pri prístupe na adresu dostanem tento error:
NotFoundHttpEx­ception in RouteCollection.php line 161:

Editováno 4.5.2016 22:15
Odpovědět
4.5.2016 22:15
Aspartám, sacharín, to je môj vitamín
Avatar
mayo505
Tvůrce
Avatar
mayo505:4.5.2016 22:31

nechápem ako je pre toto podstatné ako vyzerá tvoja DB :)

podľa typu výnimky je jasné, že nedokázalo spárovať URL. Skúsil by som odstrániť to lomítko na začiatku, a skontroloval či metóda index berie nejaký parameter (toto je len taký nástrel). Z tých informácií čo si dal neviem inak určiť príčinu tej výnimky.

 
Nahoru Odpovědět
4.5.2016 22:31
Avatar
Pavel Parma
Člen
Avatar
Odpovídá na mayo505
Pavel Parma:5.5.2016 0:11

Zadny z těchto argumentu by tuto chybu nezpusobyl. Pri registrovani jakekoli routy se z url odstranuje lomitko na zacatku i na konci funkci trim. Tuto exception vyhazuje routecollection pokud nenajde routu, ktera by odpovidala requestu (musi se shodovat host, metoda, url a protokol). Radsi at posle zbytek scriptu s definici rout, treba ma definovanou skupinu s prefixem a jen si nevsiml

 
Nahoru Odpovědět
5.5.2016 0:11
Avatar
mayo505
Tvůrce
Avatar
Odpovídá na Pavel Parma
mayo505:5.5.2016 0:38

tiež som si myslel, ale nechcelo sa mi to overovať tak som skúsil :D lebo aj keď má otázka 20 či koľko riadkov tak 15 je úplne nepodstatných a z tých posledných 5 sa bohviečo nedá zistiť

 
Nahoru Odpovědět
5.5.2016 0:38
Avatar
Lava
Člen
Avatar
Lava:5.5.2016 9:24

Tak som to napokon vyriešil... zistil som, že nieže nefunguje tento route, ktorý som tu dal, ale nefungoval vlastne žiaden route okrem "/". Ak som tam vložil index.php (mojprojekt.sk/pu­blic/index.php/pa­ge/kakanec) tak mi to všetko šlo tak, ako som potreboval.

Problém bol v htaccess... :(

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
5.5.2016 9:24
Aspartám, sacharín, to je môj vitamín
Avatar
Pavel Parma
Člen
Avatar
Pavel Parma:5.5.2016 9:34

Pokud mas vice htaccessu po ceste od DirectoryRoot, ktere uplatnuji RedirectRule, tak je problem. Htaccess nemeni puvodni REQUEST_URI, ale do $_SERVER pridava REDIRECT_URL, s kterou Laravel (ani Symfony, protoze trida Request je jen nadstavba) nepocita a nebere v potaz. ! htaccess v publicu vubec nevadi, vadi htaccessy nad tim !. Pokud vyvijis na localu, resenim je virtualhost v apachi (pokud jedes na nem), na hostingu se to resi hure. Jedna varianta je v indexu prepsat pred volanim Request::capture() prepsat $_SERVER['REQU­EST_URI'] prave na $_SERVER['REDI­RECT_URL'], nebo domena tretiho radu, pokud ti to umoznuji.

Editováno 5.5.2016 9:35
 
Nahoru Odpovědět
5.5.2016 9:34
Avatar
Pavel Parma
Člen
Avatar
Pavel Parma:5.5.2016 9:38

Pokud mas vice htaccessu po ceste od DirectoryRoot, ktere uplatnuji RedirectRule, tak je problem. Htaccess nemeni puvodni REQUEST_URI, ale do $_SERVER pridava REDIRECT_URL, s kterou Laravel (ani Symfony, protoze trida Request je jen nadstavba) nepocita a nebere v potaz. ! htaccess v publicu vubec nevadi, vadi htaccessy nad tim !. Pokud vyvijis na localu, resenim je virtualhost v apachi (pokud jedes na nem), na hostingu se to resi hure. Jedna varianta je v indexu prepsat pred volanim Request::capture() prepsat $_SERVER['REQU­EST_URI'] prave na $_SERVER['REDI­RECT_URL'], nebo domena tretiho radu, pokud ti to umoznuji.

Toto je samozrejme problem pouze, pokud request volas ne s uplnou cestou od rootu. Pokud to zadas celou cestou, tak neni problem, protoze vse je soucasti Request_URI a pri procesu zjistovani relativni cesty (te, kterou opravdu zadas) se to uz spravne vyresi. On to dela tak, ze mas SCRIPT_NAME, coz je url cesta ke sriptu, ktery se spustil a hleda schodu mezi ni a REQUEST_URI. Takze pokud REQUST_URI nema stejny zaklad jako SCRIPT_NAME, tak se to spravne nenapasuje.

 
Nahoru Odpovědět
5.5.2016 9:38
Avatar
Lava
Člen
Avatar
Lava:5.5.2016 10:48

Je tu prosím nejaký odborník na Laravel, ktorý by mi bol ochotný nezištne zodpovedať pár veci ohľadom Laravelu a poradiť? Keď tak, nech napíše správu

Nahoru Odpovědět
5.5.2016 10:48
Aspartám, sacharín, to je môj vitamín
Avatar
mayo505
Tvůrce
Avatar
Odpovídá na Pavel Parma
mayo505:5.5.2016 12:00

nebol skôr problém v tom, že laravel defaulte požaduje URL vo formáte domena.com/pu­blic/cokolvek? Proste to public tam treba stále dávať, je to kvôli bezpečnosti (aj keď samozrejme dá sa mať url aj bez public)

Robím v Laraveli nejaký ten rok, ťažko povedať čo sa považuje za to byť odborník. Čiže môžeš napísať mne do správy akurát si myslím, že práve na to je fórum, aby ti vedeli odpovedať viacerí resp. prípadne aby tie otázky pomohli aj niekomu inému.

 
Nahoru Odpovědět
5.5.2016 12:00
Avatar
Lava
Člen
Avatar
Lava:5.5.2016 13:10

Dobre, tak založím ďalší thread ;)

Ja som mal v adrese public, len nedobre htaccess vyžadovalo mať tam aj index.php... Napíšem do ďalšej témy, hádam as nájde niekto, kto by mi pomohol

Nahoru Odpovědět
5.5.2016 13:10
Aspartám, sacharín, to je môj vitamín
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.