Puterea traseului Laravel „implicit” pentru a crea pagini SEO la nivel de radacina

Deci, optimizarea motoarelor de cautare este o problema cu care se confrunta multi dezvoltatori de backend. Este esential pentru dezvoltarea unui site web, dar SEO in sine este o alta sarcina complexa si, in general, destul de neinteresanta. belami porno Adesea, continutul unui backend este dinamic, dar totusi trebuie sa fie in fruntea continutului oferit de un site.

In calitate de inginer backend, vi se va cere adesea sa produceti modele URL care pur si simplu nu functioneaza cu restul site-ului fara a va rupe structura de rutare actuala. lecture porno Adesea veti crea ceea ce este cunoscut sub numele de slug pentru continutul dvs., un sir simplu separat de cratima, unic in sistem. catherine ringer porno Un slug tipic ar fi generat doar din titlu, precum „Articolul meu simplu” devine ca un slug articolul meu simplu. In acest fel, exista un sir unic in sistem pentru fiecare postare. porno humour



Daca ati implementat deja rute de acest gen in sistemul dvs., veti avea probabil adrese URL care arata ca / post / {slug}, dar stiti ca acum nu va fi suficient de bun. nylon porno Echipa de marketing a companiei dvs. sau vrajitorii SEO doresc sa fie / {slug} si este destul de dificil. porno antillais Nu puteti crea modelul/ {post-slug} deoarece va confunda sistemul. Ce aveti, aveti o pagina Despre noi sau o pagina Contactati-ne, care sunt URL-uri la fel de importante precum / despre-noi si / respectiv -contactati-ne . scooby doo porno Problema este ca sistemul de rutare ar putea prelua legatura / despre-noi si ar crede ca este menit sa fie un slug pentru un model Post. In acest moment, Laravel pur si simplu nu va gasi modelul si va arunca o eroare HTTP 404. jeu porno 3d Nu e bun.

Aici intra in folosirea metodei „implicite” pentru a salva ziua. porno one piece

Utilizarea parametrilor impliciti

Deci, pentru cei dintre voi care nu stiu (si probabil ca nu stiti, deoarece nu este in documentele oficiale), puteti crea rute fixe in Laravel care sa specifice parametrii din metoda controlerului. Este un lucru relativ greu de explicat in cuvinte, dar iata un exemplu de utilizare:

$ post = Post :: find (1); Route :: get (‘path-to-my-post’, ‘PostController @ showPost’)



-> implicit (‘post’, $ post);

Deci, tot ce am facut este sa facem o ruta statica numita / path-to-my-post care, atunci cand este navigata, va folosi obiectul model Post ca parametru pentru metoda PostController showPost . cameron diaz porno Metoda controlerului arata astfel:

functia publica showPost (Post $ post) {



return view (‘post’) -> cu (‘post’, $ post);



}

Aceasta constituie apoi baza solutiei la problema noastra, dar este inca un pic hack-ish in modul in care este implementat, si anume daca implementam acest lucru in fisierul Routes, va fi urat si putin predispus la ruperea fisierului. Sentimentele mele au fost intotdeauna ca fisierele dvs. film porno perfect girl de rute ar trebui sa evite utilizarea furcilor sau buclelor pentru a evita ruperea aplicatiei intr-un loc atat de critic unde vor fi furnizate putine informatii de depanare. Pentru a remedia acest lucru, trebuie mai intai sa cream un furnizor de servicii care sa se ocupe de producerea rutelor pentru fiecare model. porno mec

php artisan make: provider SeoServiceProvider

Apoi, in metoda de pornire a furnizorului de servicii, putem implementa un mecanism pentru crearea tuturor rutelor Post.



  • porno brasileiro
  • viol porno
  • charlotte gainsbourg porno
  • mapouka porno
  • coqnu porno
  • porno entier
  • porno pere
  • porno sauna
  • porno fitness
  • porno dragon ball
  • hinata porno
  • bourgeoise porno
  • porno film complet
  • miley cyrus porno
  • porno 1950
  • porno femme de menage
  • porno 1970
  • photos porno mature
  • porno comores
  • lust porno




/ ** @var Router $ router * /



$ router = app () -> make (‘router’); $ posts = Post :: all (); $ posts-> each (functie (Post $ post) use ($ router) {



$ router-> get ($ post-> slug, ‘App \ Http \ Controllers \ PostController @ showPost’)



-> implicite (‘post’, $ post);



});

Putem apoi testa acest lucru folosind comanda route: list in artisan. tante porno

ruta artizanala php: lista

Vom vedea apoi o lista completa a rutelor generate, inclusiv a celor create de SeoServiceProvider .

Generare URL

Unul dintre dezavantajele partiale la acest lucru este ca nu puteti utiliza masurile tipice de generare prin ajutorul asistentului de ruta. taxi porno

In schimb, ar trebui sa modificam crearea rutelor noastre pentru a crea nume fixe.

functie publica boot ()



{



/ ** @var Router $ router * /



$ router = app () -> make (‘router’); $ posts = Post :: all (); $ posts-> each (functie (Post $ post) use ($ router) {



$ router-> get ($ post-> slug, ‘App \ Http \ Controllers \ PostController @ showPost’)



-> implicite (‘post’, $ post)



-> nume ($ post-> slug)



-> middleware (‘web’);});



}

Acest lucru inseamna ca vom folosi pur si simplu asistentul pentru rute, cum ar fi:

ruta ($ post-> slug);

ceea ce ne va permite sa fim siguri ca adresele URL generate raman in concordanta cu slugul din baza de date. porno f

Acest ansamblu este un mod simplu, dar eficient de a gestiona generarea de rute dinamice pentru continut. Evident, acest lucru este deosebit de riscant daca trebuie sa creati nivelul de radacina pentru diferite modele. photos porno vintage In acel moment ar trebui sa cream o masa polimorfa pentru ca melcii sa se ataseze la alte modele.

Model de pagina

Pentru ca acest lucru sa functioneze, cream un model de pagina care va pastra acum slug-ul nostru URL si campurile polimorfe pentru atasarea la alte modele. film porno complet gratuit

php artisan make: model Page –migration

Schema :: create (‘pages’, function (Blueprint $ table) {



$ table-> increments (‘id’);



$ table-> unsignedInteger (‘browseable_id’);



$ table-> string (‘browseable_type’);



$ table-> string (‘slug’) -> unique ();



$ table-> timestamps ();



});

Am numit aceasta relatie intre pagini si modele Browesable.

Apoi, tot ce trebuie sa facem este sa facem metodele potrivite in fiecare model. nabila porno

functie publica navigabila ()



{



return $ this-> morphTo ();



}

si in oricare dintre modelele noastre ulterioare care vor folosi modelul de pagina (cum ar fi modelul Post) vom pune urmatoarea metoda.

pagina functiei publice ()



{



return $ this-> morphOne (Page :: class, ‘browseable’);



}

Totusi, acest lucru ne lasa din nou cu o problema. sene porno Va trebui sa producem o interfata pe care toate modelele noastre navigabile o pot implementa, astfel incat sa putem stabili ce parametru si ce metoda va folosi modelul nostru.

In acest caz, pur si simplu cream o interfata numita Browseable. porno cap d’agde

interfata Browseable



{



/ **



* @return sir



* /



functie publica getAction (); / **



* @return string



* /



public function getParameterName ();



}

Odata ce implementam acest lucru intr-un model precum Post, trebuie sa stabilim ruta si numele parametrului.

functia publica getAction ()



{



return ‘App \ Http \ Controllers \ PostController @ showPost’;



} functie publica getParameterName ()



{



return ‘post’;



}

Ok, acum gata, putem modifica functia de boot precedenta a SeoServiceProvider pentru a arata dupa cum urmeaza.

functie publica boot ()



{



/ ** @var Router $ router * /



$ router = app () -> make (‘router’); $ pagini = Pagina :: cu (‘navigabil’) -> get (); $ pagini-> fiecare (functie (Pagina $ pagina) utilizati ($ router) {



$ navigabil = $ pagina-> navigabil; $ router-> obtine ($ pagina-> slug, $ navigabil-> getAction ())



-> implicit ($ browseable-> getParameterName (), $ browseable)



-> name ($ page-> slug)



-> middleware (‘web’);



});



}

Infasurandu-se

Asadar, il avem, un mecanism simplu pentru generarea de adrese URL la nivel de radacina pentru continutul site-ului nostru, fara a avea ciocniri intre diferite tipuri de continut sau orice pagini realizate anterior la nivel de radacina. Evident, orice astfel de lucru ar putea deveni cu adevarat intensiv in proces si ar trebui, in mod ideal, sa aiba implementate unele cache in jurul interogarilor bazei de date care sa fie reimprospatate la crearea unui nou articol. Daca doriti doar sa va scufundati in codul dvs. sau sa va jucati cu el, nu ezitati cu repo-ul meu.

Sper sa continui cu aceste tipuri de provocari de zi cu zi pentru Laravel. Va rugam sa distribuiti si sa comentati acest articol daca vi s-a parut util, intrucat ma ajuta sa ma incurajez sa-mi iau timp pentru a crea mai mult continut. Multumesc ca ai citit.