{"id":47396,"date":"2022-12-16T14:16:28","date_gmt":"2022-12-16T13:16:28","guid":{"rendered":"https:\/\/kinsta.com\/dk\/?p=47396&#038;preview=true&#038;preview_id=47396"},"modified":"2023-08-24T11:13:05","modified_gmt":"2023-08-24T10:13:05","slug":"laravel-routes","status":"publish","type":"post","link":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/","title":{"rendered":"Beherskelse af Laravel Routes"},"content":{"rendered":"<p>N\u00e5r det kommer til backend, st\u00f8der udviklerne i sidste ende p\u00e5 ruter. Ruter kan betragtes som backendens rygrad, da alle anmodninger, som serveren modtager, omdirigeres til en controller via en ruteliste, der kortl\u00e6gger anmodninger til controllere eller handlinger.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/blog\/what-is-laravel\/\">Laravel<\/a> skjuler mange implementeringsdetaljer for os og leveres med en masse syntaktisk sukker, der hj\u00e6lper b\u00e5de nye og erfarne udviklere med at udvikle deres webapplikationer.<\/p>\n<p>Lad os se n\u00e6rmere p\u00e5, hvordan man h\u00e5ndterer ruter i Laravel.<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Backend-routing og Cross-Site Scripting i Laravel<\/h2>\n<p>P\u00e5 en server findes der b\u00e5de offentlige og private ruter. Offentlige ruter kan give anledning til bekymring p\u00e5 grund af muligheden for cross-site scripting (XSS), en type <a href=\"https:\/\/kinsta.com\/dk\/blog\/sql-injection\/\">injektionsangreb<\/a>, der kan g\u00f8re dig og dine brugere <a href=\"https:\/\/kinsta.com\/blog\/types-of-malware\/\">s\u00e5rbare over for ondsindede akt\u00f8rer<\/a>.<\/p>\n<p>Problemet er, at en bruger kan blive omdirigeret fra en rute, der ikke kr\u00e6ver et sessionstoken, til en rute, der kr\u00e6ver et sessionstoken &#8211; og de vil stadig have adgang uden tokenet.<\/p>\n\n<p>Den enkleste m\u00e5de at l\u00f8se dette problem p\u00e5 er at h\u00e5ndh\u00e6ve en ny HTTP-header og tilf\u00f8je &#8220;referrer&#8221; til ruten for at afb\u00f8de dette scenario:<\/p>\n<pre><code class=\"language-php\">'main' =&gt; [\n  'path' =&gt; '\/main',\n  'referrer' =&gt; 'required,refresh-empty',\n  'target' =&gt; ControllerDashboardController::class . '::mainAction'\n]<\/code><\/pre>\n<h2>Laravel Basic Routing<\/h2>\n<p>I <a href=\"https:\/\/kinsta.com\/blog\/laravel-9\/\">Laravel<\/a> giver ruter brugerne mulighed for at videresende den relevante anmodning til den \u00f8nskede controller. Den mest grundl\u00e6ggende Laravel-rute accepterer en Uniform Asset Identifier (din route path) og en lukning, som b\u00e5de kan v\u00e6re en funktion eller en klasse.<\/p>\n<p>I Laravel oprettes ruter inde i filerne <strong>web.php<\/strong> og <strong>api.php<\/strong>. Laravel leveres som standard med to ruter: en til WEB og en til API.<\/p>\n<p>Disse ruter befinder sig i mappen <strong>routes\/<\/strong>, men de indl\u00e6ses i <strong>Providers\/RouteServiceProvider.php<\/strong>.<\/p>\n<figure style=\"width: 875px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/laravel-route-provider-default.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/laravel-route-provider-default.png\" alt=\"En kommandolinje, der viser standardtilstanden for Laravels route service provider.\" width=\"875\" height=\"628\"><\/a><figcaption class=\"wp-caption-text\">Standardtilstand for Laravels route service provider.<\/figcaption><\/figure>\n<p>I stedet for at g\u00f8re dette kan vi indl\u00e6se ruterne direkte inde i <strong>RouteServiceProvider.php<\/strong> og springe <strong>routes\/<\/strong>-mappen helt over.<\/p>\n<figure style=\"width: 875px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/loading-laravel-routes-directly.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/loading-laravel-routes-directly.png\" alt=\"Et kommandolinjevindue, der viser indl\u00e6sningen af Laravel-ruter direkte i udbyderen.\" width=\"875\" height=\"413\"><\/a><figcaption class=\"wp-caption-text\">Indl\u00e6sning af Laravel-ruter direkte i udbyderen.<\/figcaption><\/figure>\n<h3>Omdirigerer<\/h3>\n<p>N\u00e5r vi definerer en rute, vil vi normalt \u00f8nske at omdirigere den bruger, der tilg\u00e5r den, og grundene til dette varierer meget. Det kan v\u00e6re fordi det er en deprecated route, og vi har \u00e6ndret backend eller serveren, eller det kan v\u00e6re fordi vi \u00f8nsker at installere <a href=\"https:\/\/kinsta.com\/docs\/user-settings\/logging-in\/#enable-twofactor-authentication-2fa\">to-faktor-autentifikation (2FA)<\/a> osv.<\/p>\n<p>Laravel har en nem m\u00e5de at g\u00f8re dette p\u00e5. Takket v\u00e6re frameworkets enkelhed kan vi bruge redirect-metoden p\u00e5 Route-facaden, som accepterer indgangsruten og den rute, der skal omdirigeres til.<\/p>\n<p>Valgfrit kan vi angive statuskoden for redirectet som den tredje parameter. Metoden <code>permanentRedirect<\/code> vil g\u00f8re det samme som metoden <code>redirect<\/code>, bortset fra at den altid returnerer en <a href=\"https:\/\/kinsta.com\/dk\/blog\/http-status-codes\/\">301-statuskode<\/a>:<\/p>\n<pre><code class=\"language-php\">\/\/ Simple redirect\nRoute::redirect(\"\/class\", \"\/myClass\");\n\n\/\/ Redirect with custom status\nRoute::redirect(\"\/home\", \"\/office\", 305);\n\n\/\/ Route redirect with 301 status code\nRoute::permanentRedirect(\"\/home\", \"office\");<\/code><\/pre>\n<p>Inde i redirect-ruterne er det forbudt at bruge n\u00f8gleordene &#8220;destination&#8221; og &#8220;status&#8221; som parametre, da de er reserveret af Laravel.<\/p>\n<pre><code class=\"language-php\">\/\/ Illegal to use\nRoute::redirect(\"\/home\", \"\/office\/{status}\");<\/code><\/pre>\n<h3>Visninger<\/h3>\n<p>Views er de .<strong>blade.php<\/strong>-filer, som vi bruger til at gengive frontend-delen af vores Laravel-applikation. Det bruger blade templating engine, og det er standardmetoden til at bygge en full-stack applikation udelukkende med Laravel.<\/p>\n<p>Hvis vi \u00f8nsker, at vores rute skal returnere en visning, kan vi blot bruge view-metoden p\u00e5 Route-facaden. Den accepterer en ruteparameter, et visningsnavn og et valgfrit array af v\u00e6rdier, der skal overf\u00f8res til visningen.<\/p>\n<pre><code class=\"language-php\">\/\/ When the user accesses my-domain.com\/homepage\n\/\/ the homepage.blade.php file will be rendered\nRoute::view(\"\/homepage\", \"homepage\");<\/code><\/pre>\n<p>Lad os antage, at vores visning \u00f8nsker at sige &#8220;Hello, <code>{name}<\/code>&#8221; ved at videregive et valgfrit array med denne parameter. Vi kan g\u00f8re netop dette med f\u00f8lgende kode (hvis den manglende parameter er p\u00e5kr\u00e6vet i visningen, vil anmodningen mislykkes og kaste en fejl):<\/p>\n<pre><code class=\"language-php\">Route::view('\/homepage', 'homepage', ['name' =&gt; \"Kinsta\"]);<\/code><\/pre>\n<h3>Route List<\/h3>\n<p>Efterh\u00e5nden som din applikation vokser i st\u00f8rrelse, vil antallet af anmodninger, der skal dirigeres, ogs\u00e5 vokse. Og med en stor m\u00e6ngde information kan der opst\u00e5 stor forvirring.<\/p>\n<p>Det er her, at <code>artisan route:list command<\/code> kan hj\u00e6lpe os. Den giver et overblik over alle de ruter, der er defineret i applikationen, deres middlewares og controllere.<\/p>\n<pre><code class=\"language-php\">php artisan route:list<\/code><\/pre>\n<p>Den vil vise en liste over alle ruter uden middlewares. Til dette skal vi bruge flaget <code>-v<\/code>:<\/p>\n<pre><code class=\"language-php\"><code>php artisan route:list -v<\/code><\/code><\/pre>\n<p>I en situation, hvor du m\u00e5ske bruger dom\u00e6nedrevet design, hvor dine ruter har specifikke navne i deres stier, kan du g\u00f8re brug af filtreringsmulighederne i denne kommando p\u00e5 f\u00f8lgende m\u00e5de:<\/p>\n<pre><code class=\"language-php\">php artisan route:list \u2013path=api\/account<\/code><\/pre>\n<p>Dette vil kun vise de ruter, der starter med <strong>api\/account<\/strong>.<\/p>\n<p>P\u00e5 den anden side kan vi instruere Laravel om at udelukke eller inkludere tredjepartsdefinerede ruter ved at bruge indstillingerne <code>\u2013except-vendor<\/code> eller <code>\u2013only-vendor<\/code>.<\/p>\n<h2>Ruteparametre<\/h2>\n<p>Nogle gange kan du have brug for at fange segmenter af URI&#8217;en med ruten, som f.eks. et bruger-id eller token. Det kan vi g\u00f8re ved at definere en ruteparameter, som altid er omsluttet af parenteser (<code>{}<\/code>) og kun b\u00f8r best\u00e5 af alfabetiske tegn.<\/p>\n<p>Hvis vores ruter har afh\u00e6ngigheder inden for deres callbacks, vil Laravel-tjenestecontaineren automatisk injicere dem:<\/p>\n<pre><code class=\"language-php\">use IlluminateHttpRequest;\nuse Controllers\/DashboardController;\nRoute::post('\/dashboard\/{id}, function (Request $request, string $id) {\n  return 'User:' . $id;\n}\nRoute::get('\/dashboard\/{id}, DashboardController.php);<\/code><\/pre>\n<h3>Kr\u00e6vede parametre<\/h3>\n<p>Laravels obligatoriske parametre er parametre i ruter, som vi ikke m\u00e5 springe over, n\u00e5r vi foretager et kald. Ellers vil der blive kastet en fejl:<\/p>\n<pre><code class=\"language-php\">Route::post(\"\/gdpr\/{userId}\", GetGdprDataController.php\");<\/code><\/pre>\n<p>Nu inde i <strong>GetGdprDataController.php<\/strong> f\u00e5r vi direkte adgang til parameteren<strong> $userId<\/strong>.<\/p>\n<pre><code class=\"language-php\">public function __invoke(int $userId) {\n  \/\/ Use the userId that we received\u2026\n}<\/code><\/pre>\n<p>En rute kan tage et vilk\u00e5rligt antal parametre. De injiceres i rute callbacks\/controllere baseret p\u00e5 den r\u00e6kkef\u00f8lge, de er opf\u00f8rt i:<\/p>\n<pre><code class=\"language-php\"> \/\/ api.php\nRoute::post('\/gdpr\/{userId}\/{userName}\/{userAge}', GetGdprDataController.php);\n\/\/ GetGdprDataController.php\npublic function __invoke(int $userId, string $userName, int $userAge) {\n  \/\/ Use the parameters\u2026\n}<\/code><\/pre>\n<h3>Valgfrie parametre<\/h3>\n<p>I en situation, hvor vi \u00f8nsker at g\u00f8re noget p\u00e5 en rute, n\u00e5r kun en parameter er til stede og intet andet, uden at det p\u00e5virker hele programmet, kan vi tilf\u00f8je en valgfri parameter. Disse valgfrie parametre angives ved at tilf\u00f8je <code>?<\/code> til dem:<\/p>\n<pre><code class=\"language-php\"> Route::get('\/user\/{age?}', function (int $age = null) {\n  if (!$age) Log::info(\"User doesn't have age set\");\n  else Log::info(\"User's age is \" . $age);\n}\nRoute::get('\/user\/{name?}', function (int $name = \"John Doe\") {\n  Log::info(\"User's name is \" . $name);\n}<\/code><\/pre>\n<h3>Route Wildcard<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/blog\/laravel-9\/\">Laravel<\/a> giver os mulighed for at filtrere, hvordan vores valgfrie eller obligatoriske parametre skal se ud.<\/p>\n<p>Lad os sige, at vi vil have en streng af et bruger-id. Vi kan validere det p\u00e5 denne m\u00e5de p\u00e5 ruteniveau ved hj\u00e6lp af metoden <code>where<\/code>.<\/p>\n<p>Metoden <code>where<\/code> accepterer navnet p\u00e5 parameteren og den regex-regel, der skal anvendes p\u00e5 valideringen. Som standard tager den den f\u00f8rste parameter, men hvis vi har mange, kan vi sende et array med navnet p\u00e5 parameteren som n\u00f8gle og reglen som v\u00e6rdi, og Laravel vil analysere dem alle for os:<\/p>\n<pre><code class=\"language-php\">Route::get('\/user\/{age}', function (int $age) {\n  \/\/\n}-&gt;where('age', '[0-9]+');\nRoute::get('\/user\/{age}', function (int $age) {\n  \/\/\n}-&gt;where('[0-9]+');\nRoute::get('\/user\/{age}\/{name}', function (int $age, string $name) {\n  \/\/\n}-&gt;where(['age' =&gt; '[0-9]+', 'name' =&gt; '[a-z][A-z]+');<\/code><\/pre>\n<p>Vi kan tage dette et skridt videre og anvende validering p\u00e5 alle ruter i vores applikation ved at bruge metoden <code>pattern<\/code> p\u00e5 <code>Route<\/code> facaden:<\/p>\n<pre><code class=\"language-php\"> Route::pattern('id', '[0-9]+');<\/code><\/pre>\n<p>Dette vil validere hver <code>id<\/code> parameter med dette regex-udtryk. Og n\u00e5r vi f\u00f8rst har defineret det, vil det automatisk blive anvendt p\u00e5 alle ruter, der bruger det p\u00e5g\u00e6ldende parameternavn.<\/p>\n<p>Som vi kan se, bruger Laravel <code>\/<\/code> -tegnet som separator i stien. Hvis vi \u00f8nsker at bruge det i stien, skal vi eksplicit tillade, at det er en del af vores placeholder ved hj\u00e6lp af et <code>where<\/code> regex.<\/p>\n<pre><code class=\"language-php\"> Route::get('\/find\/{query}', function ($query) {\n  \/\/\n})-&gt;where('query', , '.*');<\/code><\/pre>\n<p>Den eneste ulempe er, at det kun vil blive underst\u00f8ttet i det sidste rutesegment.<\/p>\n<h2>Navngivne ruter<\/h2>\n<p>Som navnet antyder, kan vi navngive ruter, hvilket g\u00f8r det praktisk at <a href=\"https:\/\/kinsta.com\/blog\/what-is-a-url\/\">generere URL&#8217;er<\/a> eller omdirigere til specifikke routes.<\/p>\n<h3>S\u00e5dan opretter du navngivne ruter<\/h3>\n<p>En enkel m\u00e5de at oprette en navngiven rute p\u00e5 er den metode <code>name<\/code>, der er k\u00e6det sammen med <code>Route<\/code> -facaden. Hver route&#8217;s navn skal v\u00e6re unikt:<\/p>\n<pre><code class=\"language-php\"> Route::get('\/', function () {\n})-&gt;name(\"homepage\");<\/code><\/pre>\n<h2>Route grupper<\/h2>\n<p>Rutegrupper giver dig mulighed for at dele ruteattributter som middlewares p\u00e5 tv\u00e6rs af et stort antal routes uden at skulle omdefinere det p\u00e5 hver enkelt route.<\/p>\n<h3>Middleware<\/h3>\n<p>Ved at tildele en middleware til alle de ruter, vi har, kan vi kombinere dem i en gruppe, f\u00f8rst ved at bruge metoden <code>group<\/code>. En ting, man skal v\u00e6re opm\u00e6rksom p\u00e5, er, at middlewares udf\u00f8res i den r\u00e6kkef\u00f8lge, som de anvendes i gruppen:<\/p>\n<pre><code class=\"language-php\"> Route:middleware(['AuthMiddleware', 'SessionMiddleware'])-&gt;group(function () {\n  Route::get('\/', function() {} );\n  Route::post('\/upload-picture', function () {} );\n});<\/code><\/pre>\n<h3>Controllers<\/h3>\n<p>N\u00e5r en gruppe anvender den samme controller, kan vi bruge metoden <code>controller<\/code> til at definere den f\u00e6lles controller for alle ruterne i gruppen. Nu skal vi angive den metode, som en route skal kalde.<\/p>\n<pre><code class=\"language-php\"> Route::controller(UserController::class)-&gt;group(function () {\n  Route::get('\/orders\/{userId}', 'getOrders');\n  Route::post('\/order\/{id}', 'postOrder');\n});<\/code><\/pre>\n<h3>Routing af underdom\u00e6ner<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/dk\/blog\/wordpress-underdomaener\/\">Et underdom\u00e6nenavn<\/a> er et stykke ekstra information, der tilf\u00f8jes i begyndelsen af et websteds dom\u00e6nenavn. Dette giver websteder mulighed for at adskille og organisere deres indhold til specifikke funktioner, f.eks. onlinebutikker, blogs, pr\u00e6sentationer osv. fra resten af webstedet.<\/p>\n<p>Vores ruter kan bruges til at h\u00e5ndtere routing af underdom\u00e6ner. Vi kan fange dom\u00e6net og en del af underdom\u00e6net til brug i vores controller og rute. Ved hj\u00e6lp af <code>domain<\/code> -metoden p\u00e5 <code>Route<\/code> -facaden kan vi gruppere vores ruter under et enkelt dom\u00e6ne:<\/p>\n<pre><code class=\"language-php\"> Route::domain('{store}.enterprise.com')-&gt;group(function() {\n  Route::get('order\/{id}', function (Account $account, string $id) {\n    \/\/ Your Code\n  }\n});<\/code><\/pre>\n<h3>Pr\u00e6fikser og navnepr\u00e6fikser<\/h3>\n<p>N\u00e5r vi har en gruppe af ruter, kan vi i stedet for at \u00e6ndre dem en efter en g\u00f8re brug af de ekstra hj\u00e6lpeprogrammer, som Laravel tilbyder, s\u00e5som <code>prefix<\/code> og <code>name<\/code> p\u00e5 <code>Route<\/code> -facaden.<\/p>\n<p>Metoden <code>prefix<\/code> kan bruges til at pr\u00e6fiksere hver rute i gruppen med en given URI, og metoden <code>name<\/code> kan bruges til at pr\u00e6fiksere hvert rutenavn med en given streng.<\/p>\n<p>Dette giver os mulighed for at oprette nye ting som f.eks. adminruter uden at skulle \u00e6ndre hvert enkelt navn eller pr\u00e6fiks for at identificere dem:<\/p>\n<pre><code class=\"language-php\"> Route::name('admin.\")-&gt;group(function() {\n  Route::prefix(\"admin\")-&gt;group(function() {\n    Route::get('\/get')-&gt;name('get');\n    Route::put('\/put')-&gt;name(put');\n    Route::post('\/post')-&gt;name('post');\n  });\n});<\/code><\/pre>\n<p>Nu vil URI&#8217;erne for disse routes v\u00e6re <code>admin\/get<\/code>, <code>admin\/put<\/code>, <code>admin\/post<\/code>, og navnene <code>admin.get<\/code>, <code>admin.put<\/code> og <code>admin.post<\/code>.<\/p>\n<h2>Caching af routes<\/h2>\n<p>N\u00e5r applikationen implementeres til produktionsservere, vil en god <a href=\"https:\/\/kinsta.com\/blog\/laravel-developer\/\">Laravel-udvikler<\/a> udnytte Laravels route cache.<\/p>\n<h3>Hvad er Route Caching?<\/h3>\n<p>Rutecaching mindsker den tid, det tager at registrere alle applikationsroutes.<\/p>\n<p>Ved at k\u00f8re <code>php artisan route:cache<\/code> genereres en instans af <code>Illuminate\/Routing\/RouteCollection<\/code>, og efter at v\u00e6re blevet kodet, skrives det serialiserede output til <code>bootstrap\/cache.routes.php<\/code>.<\/p>\n<p>Nu vil enhver anden anmodning <a href=\"https:\/\/kinsta.com\/blog\/laravel-caching\/\">indl\u00e6se denne cache<\/a>-fil, hvis den findes. Vores applikation beh\u00f8ver derfor ikke l\u00e6ngere at analysere og konvertere poster fra rutefilen til <code>Illuminate\/Routing\/Route<\/code> -objekter i <code>Illuminate\/Routing\/RouteCollection<\/code>.<\/p>\n<h3>Hvorfor det er vigtigt at bruge Route Caching<\/h3>\n<p>Ved ikke at bruge den route caching-funktion, som Laravel tilbyder, risikerer din applikation at k\u00f8re langsommere, end den kunne, hvilket igen kan mindske salget, brugerfastholdelsen og <a href=\"https:\/\/kinsta.com\/blog\/trust-badges\/\">tilliden til dit brand<\/a>.<\/p>\n<p>Afh\u00e6ngigt af dit projekts st\u00f8rrelse og hvor mange ruter der er, kan en simpel route caching-kommando g\u00f8re <a href=\"https:\/\/kinsta.com\/dk\/blog\/website-speed-test\/\">din applikation hurtigere<\/a> med alt fra 130% til 500% &#8211; en massiv gevinst for n\u00e6sten ingen indsats.<\/p>\n<h2>Opsummering<\/h2>\n<p>Routing er rygraden i backend-udvikling. Laravel-framework excellerer i dette ved at give en verbose m\u00e5de at definere og administrere ruter p\u00e5.<\/p>\n<p>Udvikling kan faktisk v\u00e6re tilg\u00e6ngelig for alle og bidrage til at <a href=\"https:\/\/kinsta.com\/dk\/blog\/laravel-ydeevnen\/\">fremskynde en applikation<\/a> alene i kraft af at den er bygget i Laravel.<\/p>\n<p>Hvilke andre tricks og tips er du st\u00f8dt p\u00e5 vedr\u00f8rende Laravel-routes? Lad os vide det i kommentarfeltet!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>N\u00e5r det kommer til backend, st\u00f8der udviklerne i sidste ende p\u00e5 ruter. Ruter kan betragtes som backendens rygrad, da alle anmodninger, som serveren modtager, omdirigeres til &#8230;<\/p>\n","protected":false},"author":267,"featured_media":47397,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[285,626,621],"topic":[712],"class_list":["post-47396","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-laravel","tag-laravel-routes","tag-php-frameworks","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Beherskelse af Laravel Routes<\/title>\n<meta name=\"description\" content=\"Routing er et af de vigtigste aspekter af enhver backend-applikation. Brug denne guide til at f\u00e5 et fast greb om Laravel routes og routing.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/\" \/>\n<meta property=\"og:locale\" content=\"da_DK\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Beherskelse af Laravel Routes\" \/>\n<meta property=\"og:description\" content=\"Routing er et af de vigtigste aspekter af enhver backend-applikation. Brug denne guide til at f\u00e5 et fast greb om Laravel routes og routing.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-16T13:16:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-24T10:13:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Coman Cosmin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Routing er et af de vigtigste aspekter af enhver backend-applikation. Brug denne guide til at f\u00e5 et fast greb om Laravel routes og routing.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_dk\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_dk\" \/>\n<meta name=\"twitter:label1\" content=\"Skrevet af\" \/>\n\t<meta name=\"twitter:data1\" content=\"Coman Cosmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimeret l\u00e6setid\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/\"},\"author\":{\"name\":\"Coman Cosmin\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da\"},\"headline\":\"Beherskelse af Laravel Routes\",\"datePublished\":\"2022-12-16T13:16:28+00:00\",\"dateModified\":\"2023-08-24T10:13:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/\"},\"wordCount\":1743,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg\",\"keywords\":[\"laravel\",\"laravel routes\",\"php frameworks\"],\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/\",\"url\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/\",\"name\":\"Beherskelse af Laravel Routes\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg\",\"datePublished\":\"2022-12-16T13:16:28+00:00\",\"dateModified\":\"2023-08-24T10:13:05+00:00\",\"description\":\"Routing er et af de vigtigste aspekter af enhver backend-applikation. Brug denne guide til at f\u00e5 et fast greb om Laravel routes og routing.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#breadcrumb\"},\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/dk\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/dk\/emner\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Beherskelse af Laravel Routes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/dk\/#website\",\"url\":\"https:\/\/kinsta.com\/dk\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Hurtig, sikker, premium hostingl\u00f8sninger\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/dk\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"da-DK\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/dk\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/\",\"https:\/\/x.com\/kinsta_dk\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da\",\"name\":\"Coman Cosmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g\",\"caption\":\"Coman Cosmin\"},\"description\":\"Cosmin Coman is a technology writer and developer with over 3 years of experience. Apart from writing for Kinsta, he has assisted in research at nuclear physics facilities and universities. Tech-savvy and integrated into the community, he always comes up with innovative solutions.\",\"url\":\"https:\/\/kinsta.com\/dk\/blog\/author\/comancosmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Beherskelse af Laravel Routes","description":"Routing er et af de vigtigste aspekter af enhver backend-applikation. Brug denne guide til at f\u00e5 et fast greb om Laravel routes og routing.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/","og_locale":"da_DK","og_type":"article","og_title":"Beherskelse af Laravel Routes","og_description":"Routing er et af de vigtigste aspekter af enhver backend-applikation. Brug denne guide til at f\u00e5 et fast greb om Laravel routes og routing.","og_url":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/","article_published_time":"2022-12-16T13:16:28+00:00","article_modified_time":"2023-08-24T10:13:05+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg","type":"image\/jpeg"}],"author":"Coman Cosmin","twitter_card":"summary_large_image","twitter_description":"Routing er et af de vigtigste aspekter af enhver backend-applikation. Brug denne guide til at f\u00e5 et fast greb om Laravel routes og routing.","twitter_image":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg","twitter_creator":"@kinsta_dk","twitter_site":"@kinsta_dk","twitter_misc":{"Skrevet af":"Coman Cosmin","Estimeret l\u00e6setid":"9 minutter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/"},"author":{"name":"Coman Cosmin","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da"},"headline":"Beherskelse af Laravel Routes","datePublished":"2022-12-16T13:16:28+00:00","dateModified":"2023-08-24T10:13:05+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/"},"wordCount":1743,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/dk\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg","keywords":["laravel","laravel routes","php frameworks"],"inLanguage":"da-DK","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/","url":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/","name":"Beherskelse af Laravel Routes","isPartOf":{"@id":"https:\/\/kinsta.com\/dk\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg","datePublished":"2022-12-16T13:16:28+00:00","dateModified":"2023-08-24T10:13:05+00:00","description":"Routing er et af de vigtigste aspekter af enhver backend-applikation. Brug denne guide til at f\u00e5 et fast greb om Laravel routes og routing.","breadcrumb":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#breadcrumb"},"inLanguage":"da-DK","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/"]}]},{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#primaryimage","url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg","contentUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2022\/12\/laravel-routes.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-routes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/dk\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/dk\/emner\/laravel\/"},{"@type":"ListItem","position":3,"name":"Beherskelse af Laravel Routes"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/dk\/#website","url":"https:\/\/kinsta.com\/dk\/","name":"Kinsta\u00ae","description":"Hurtig, sikker, premium hostingl\u00f8sninger","publisher":{"@id":"https:\/\/kinsta.com\/dk\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/dk\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"da-DK"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/dk\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/dk\/","logo":{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/","https:\/\/x.com\/kinsta_dk","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da","name":"Coman Cosmin","image":{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g","caption":"Coman Cosmin"},"description":"Cosmin Coman is a technology writer and developer with over 3 years of experience. Apart from writing for Kinsta, he has assisted in research at nuclear physics facilities and universities. Tech-savvy and integrated into the community, he always comes up with innovative solutions.","url":"https:\/\/kinsta.com\/dk\/blog\/author\/comancosmin\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/47396","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/users\/267"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/comments?post=47396"}],"version-history":[{"count":11,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/47396\/revisions"}],"predecessor-version":[{"id":47884,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/47396\/revisions\/47884"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/47396\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/47396\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/47396\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/47396\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/47396\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/47396\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/47396\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/47396\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/47396\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/47396\/translations\/dk"},{"href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/47396\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/media\/47397"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/media?parent=47396"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/tags?post=47396"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/topic?post=47396"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}