Diskuze: Laravel routing

PHP PHP Laravel routing American English version English version

Avatar
Mego
Člen
Avatar
Mego:

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. května 22:15
Odpovědět 4. května 22:15
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
Avatar
mayo505
Redaktor
Avatar
mayo505:

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  +1 4. května 22:31
Avatar
Pavel Parma
Člen
Avatar
Odpovídá na mayo505
Pavel Parma:

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  +1 5. května 0:11
Avatar
mayo505
Redaktor
Avatar
Odpovídá na Pavel Parma
mayo505:

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. května 0:38
Avatar
Mego
Člen
Avatar
Mego:

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. května 9:24
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
Avatar
Pavel Parma
Člen
Avatar
Pavel Parma:

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. května 9:35
 
Nahoru Odpovědět 5. května 9:34
Avatar
Pavel Parma
Člen
Avatar
Pavel Parma:

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. května 9:38
Avatar
Mego
Člen
Avatar
Mego:

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. května 10:48
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
Avatar
mayo505
Redaktor
Avatar
Odpovídá na Pavel Parma
mayo505:

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. května 12:00
Avatar
Mego
Člen
Avatar
Mego:

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. května 13:10
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
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.