{"id":48892,"date":"2023-02-21T13:42:34","date_gmt":"2023-02-21T12:42:34","guid":{"rendered":"https:\/\/kinsta.com\/dk\/?p=48892&#038;preview=true&#038;preview_id=48892"},"modified":"2023-08-24T10:29:04","modified_gmt":"2023-08-24T09:29:04","slug":"laravel-10","status":"publish","type":"post","link":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/","title":{"rendered":"Hvad er nyt i Laravel 10: En dybdeg\u00e5ende gennemgang af de seneste opdateringer og funktioner"},"content":{"rendered":"<p>Efter over et \u00e5rti siden introduktionen af det vildt popul\u00e6re <a href=\"https:\/\/kinsta.com\/blog\/what-is-laravel\/\">Laravel framework<\/a>, har du s\u00e5 nogensinde t\u00e6nkt: &#8220;Hvad mere kan Laravel tilbyde PHP-udviklere?&#8221;<\/p>\n<p>I betragtning af hvor meget det allerede har forenklet PHP-udvikling for b\u00e5de nybegyndere og professionelle udviklere, kan nogle m\u00e5ske endda h\u00e6vde, at det har fork\u00e6let udviklere til at tro, at PHP er det nemmeste programmeringssprog derude.<\/p>\n\n<p>S\u00e5 har Laravel stadig flere overraskelser i vente for <a href=\"https:\/\/kinsta.com\/blog\/laravel-developer\/\">Laravel-udviklere<\/a>? Eller er alle muligheder for at st\u00f8tte PHP-udviklere udt\u00f8mt?<\/p>\n<p>Vi ved i hvert fald, at Laravel 10 har meget at byde p\u00e5. Det er det, vi vil afd\u00e6kke i denne artikel, n\u00e5r vi tager dig med p\u00e5 en rejse gennem Laravel 10&#8217;s nye funktioner, rettelser og nyligt for\u00e6ldede metoder og pakker.<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>Laravel-udgivelsesplan<\/h2>\n<p>Laravel-kerneteamet plejede at frigive to st\u00f8rre versioner \u00e5rligt (en hver sjette m\u00e5ned).<\/p>\n<p>Udgivelsescyklussen blev dog \u00e6ndret, da Taylor Otwell, skaberen af Laravel, <a href=\"https:\/\/blog.laravel.com\/updates-to-laravels-versioning-policy\" target=\"_blank\" rel=\"noopener noreferrer\">annoncerede<\/a>, at der nu ville blive udgivet en enkelt st\u00f8rre version hvert \u00e5r. Dette gjorde det muligt for kerneholdet og f\u00e6llesskabet at bruge mere tid og kr\u00e6fter p\u00e5 en specifik version af rammen og indf\u00f8re nye kraftfulde funktioner uden at foretage brud p\u00e5 \u00e6ndringer.<\/p>\n<p>Laravel 10 var planlagt til at blive udgivet den 7. februar 2023, efter udgivelsen af <a href=\"https:\/\/kinsta.com\/blog\/laravel-9\/\">Laravel 9<\/a> den 8. februar 2022. Holdet havde dog brug for mere tid til at f\u00e6rdigg\u00f8re deres kunstv\u00e6rk, og Laravel 10 blev i sidste ende offentliggjort den 14. februar 2023.<\/p>\n<p>Laravel 11 forventes nu at blive udgivet i f\u00f8rste kvartal af februar 2024.<\/p>\n<p>Derudover tilbydes der if\u00f8lge <a href=\"https:\/\/laravel.com\/docs\/10.x\/releases#support-policy\" target=\"_blank\" rel=\"noopener noreferrer\">supportpolitikken<\/a> fejlrettelser i 18 m\u00e5neder og sikkerhedsopdateringer i to \u00e5r for alle Laravel-versioner.<\/p>\n<p>F\u00f8lgende er den forventede tidsplan for fejlrettelser og sikkerhedsopdateringer:<\/p>\n<ul>\n<li>Laravel 9 vil fortsat f\u00e5 fejlrettelser indtil den 8. august 2023 og sikkerhedsrettelser indtil den 6. februar 2024.<\/li>\n<li>Laravel 10 vil f\u00e5 fejlrettelser indtil den 6. august 2024 og sikkerhedsrettelser indtil den 4. februar 2025.<\/li>\n<li>Laravel 11 forventes at f\u00e5 fejlrettelser indtil den 5. august 2025 og sikkerhedsrettelser indtil den 3. februar 2026.<\/li>\n<\/ul>\n<h2>Skal du opgradere til Laravel 10?<\/h2>\n<p>Det er vigtigt at huske, at vi ikke altid beh\u00f8ver at opgradere vores applikations Laravel-version til den nyeste version, s\u00e5 snart en ny version bliver udgivet.<\/p>\n<p>Laravel er et open source framework, hvilket indeb\u00e6rer, at hver gang vi installerer en ny Laravel-instans p\u00e5 vores maskine, ejer vi frameworkets kodebase. Det betyder, at selv hvis den rammeversion, som vores app bruger, ikke l\u00e6ngere underst\u00f8ttes, vil appen stadig fungere; vi skal bare selv vedligeholde den.<\/p>\n<p>Som f\u00f8lge heraf foresl\u00e5s det generelt, at stabilitet af applikationen prioriteres h\u00f8jere end opgraderinger af framework&#8217;en.<\/p>\n<p>Kort sagt b\u00f8r du overveje at opgradere til Laravel 10, n\u00e5r:<\/p>\n<ul>\n<li>Applikationen er stabil med den nuv\u00e6rende version og fungerer uden problemer.<\/li>\n<li>Den nye version tilf\u00f8jer enten en funktion, som din applikation har brug for, eller l\u00f8ser et problem, som din applikation oplever.<\/li>\n<li>Applikationen vil v\u00e6re godt testet, f\u00f8r opgraderings\u00e6ndringerne bliver skubbet ind i produktionen.<\/li>\n<\/ul>\n<h2>Laravel 10 varme opdateringer<\/h2>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-21.png\" alt=\"Laravel 10-logoet med ordet \"Laravel\" i lys orange og \"10\" i gr\u00e5t.\" width=\"1024\" height=\"576\"><figcaption class=\"wp-caption-text\">Laravel 10.<\/figcaption><\/figure>\n<p>Kinsta er en stor fan af Laravel. Derfor har vi samlet h\u00f8jdepunkterne i Laravel 10 i en enkelt artikel, s\u00e5 du kan bruge dem som reference og guide til at bruge alle de nye funktioner. Vi anbefaler derfor, at du denne side til dine bookm\u00e6rker og genbes\u00f8ger den fra tid til anden.<\/p>\n<h3>Nye funktioner og opdateringer i Laravel 10<\/h3>\n<p>Der er ingen tvivl om, at den mest sp\u00e6ndende del af enhver ny version er tilf\u00f8jelsen af nye funktioner. S\u00e5 lad os uden videre begynde med at tage et kig p\u00e5 de nye funktioner og opdateringer i Laravel 10.<\/p>\n<h4>1. PHP 8.1: I hjertet af Laravel 10<\/h4>\n<p>PHP 8.1 er den mindst kr\u00e6vede PHP-version i Laravel 10. Nogle af PHP 8.1-funktionerne, s\u00e5som readonly properties og array_is_list, anvendes i Laravel 10.<\/p>\n<h4>2. Underst\u00f8ttelse af PHP 8.2<\/h4>\n<p>PHP 8.2 blev frigivet den 8. december 2022, kun to m\u00e5neder f\u00f8r Laravel 10-udgivelsesdatoen. Alligevel b\u00f8r dette ikke afholde dig fra at udnytte PHP 8.2-funktioner, da Laravel 10 uden at g\u00f8re noget ekstra er klar til PHP 8.2.<\/p>\n<p>Faktisk underst\u00f8tter hele Laravel-\u00f8kosystemet, herunder Forge, Vapor og Envoyer, PHP 8.2, og du kan endda bruge <a href=\"https:\/\/blog.laravel.com\/laravel-loves-php-82\" target=\"_blank\" rel=\"noopener noreferrer\">PHP 8.2 med Laravel 9<\/a>. Hvor fedt er det ikk&#8217; lige!<\/p>\n<h4>3. Opgradering af officielle Laravel-pakker<\/h4>\n<p>Ikke alene er rammen professionelt vedligeholdt og opdateres regelm\u00e6ssigt, men det samme g\u00f8r alle de officielle pakker og \u00f8kosystemet.<\/p>\n<p>Nedenst\u00e5ende er en liste over de seneste officielle Laravel-pakker, der er blevet opdateret til underst\u00f8ttelse af Laravel 10:<\/p>\n<ol>\n<li>Breeze<\/li>\n<li>Cashier Stripe<\/li>\n<li>Dusk<\/li>\n<li>Horizon<\/li>\n<li>Installat\u00f8r<\/li>\n<li>Jetstream<\/li>\n<li>Passport<\/li>\n<li>Pint<\/li>\n<li>Sail<\/li>\n<li>Scout<\/li>\n<li>Valet<\/li>\n<\/ol>\n<p><a href=\"https:\/\/kinsta.com\/dk\/blog\/laravel-inertia\/\">Inertiajs 1.0.1<\/a> er en anden godbid for Rails-, Vue-, React- og Svelte-fans og underst\u00f8tter ogs\u00e5 Laravel 10.<\/p>\n<h4>4. Opgradering af Predis-versionen<\/h4>\n<p>Predis er en robust <a href=\"https:\/\/kinsta.com\/dk\/blog\/in-memory-database\/\">Redis<\/a>-klient til PHP, der kan hj\u00e6lpe dig med at <a href=\"https:\/\/kinsta.com\/blog\/laravel-caching\/\">f\u00e5 mest muligt ud af caching<\/a> for at give en fantastisk brugeroplevelse. Laravel underst\u00f8ttede tidligere b\u00e5de version 1 og 2, men fra og med Laravel 10 underst\u00f8tter rammen ikke l\u00e6ngere Predis 1.<\/p>\n<p>Selv om Laravel-dokumentationen <a href=\"https:\/\/laravel.com\/docs\/10.x\/redis\" target=\"_blank\" rel=\"noopener noreferrer\">n\u00e6vner Predis<\/a> som pakken til interaktion med Redis, kan du ogs\u00e5 bruge den <a href=\"https:\/\/github.com\/phpredis\/phpredis\/\" target=\"_blank\" rel=\"noopener noreferrer\">officielle PHP-udvidelse<\/a>. Denne udvidelse indeholder en API til kommunikation med Redis-servere.<\/p>\n<h4>5. Native typedeklarationer<\/h4>\n<p>Laravel plejede at bruge DocBlocks i sin skeletkode for at tydeligg\u00f8re, hvad et stykke kode g\u00f8r, og hvilke typer parametre eller svar man kan forvente. Men takket v\u00e6re native typedeklarationer i Laravel 10 vil dette \u00e6ndre sig.<\/p>\n<p>Den bedste m\u00e5de at forklare denne \u00e6ndring p\u00e5 er med et simpelt eksempel. I stedet for at en funktion ser s\u00e5ledes ud:<\/p>\n<pre><code class=\"language-php\">\/**\n* Determine whether the user can create models.\n*\n* @param {{ namespacedUserModel }} $user\n* @return IlluminateAuthAccessResponse|bool\n*\/\n\npublic function create({{ user }} $user)\n{\n  \/\/\n}<\/code><\/pre>\n<p>&#8230; vil den se s\u00e5ledes ud:<\/p>\n<pre><code class=\"language-php\">\/**\n* Determine whether the user can create models.\n*\/\n\npublic function create({{ user }} $user): bool\n{\n  \/\/\n}<\/code><\/pre>\n<p>Denne \u00e6ndring er udelukkende til gavn for udvikleren, da IDE&#8217;er vil kende formen p\u00e5 den forventede parameter og det forventede svar. Det vil give en bedre tydelighed af typen, n\u00e5r det ikke er muligt gennem PHP&#8217;s native typer. Derfor vil det hj\u00e6lpe kodeeditorer til at yde bedre med auto-complete-funktioner.<\/p>\n<h4>6. Alle valideringsregler kan aktiveres som standard<\/h4>\n<p>Hvis du skulle lave en invokable valideringsregel i Laravel 9, skal du tilf\u00f8je et <code>--invokable<\/code> -flag efter Artisan-kommandoen. Dette er ikke l\u00e6ngere n\u00f8dvendigt, da alle Laravel 10-regler er invokable som standard. S\u00e5 du kan k\u00f8re f\u00f8lgende kommando for at oprette en ny invokable regel i Laravel 10:<\/p>\n<pre><code class=\"language-php\">php artisan make:rule CustomRule<\/code><\/pre>\n<h4>7. Native Column Modification Support<\/h4>\n<p>I et fors\u00f8g p\u00e5 at fjerne behovet for DBAL (<code>doctrine\/dbal<\/code>) pakken, n\u00e5r man bruger <code>change()<\/code> til at \u00e6ndre kolonner, blev der indf\u00f8rt en ny funktion i Laravel 10, som g\u00f8r det muligt for udviklere at bruge <code>change()<\/code> metoden og \u00e6ndre kolonner med <a href=\"https:\/\/kinsta.com\/dk\/blog\/postgresql-vs-sql-server\/\">MySQL, PostgreSQL<\/a> og <a href=\"https:\/\/kinsta.com\/dk\/blog\/postgresql-vs-sql-server\/\">SQL Server<\/a> uden behov for ekstra pakker. Dette er en betydelig og <a href=\"https:\/\/github.com\/laravel\/framework\/pull\/45487#issuecomment-1371500000\" target=\"_blank\" rel=\"noopener noreferrer\">risikabel brud\u00e6ndring<\/a>, men vi mener, at det er det v\u00e6rd, da det fjerner afh\u00e6ngigheden af en ekstra pakke.<\/p>\n<p>For at f\u00e5 en bedre forst\u00e5else af den nye funktion kan du se eksemplet nedenfor:<\/p>\n<pre><code class=\"language-php\">$table-&gt;integer('user_balance')-&gt;unsigned()-&gt;default(0)-&gt;comment('balance'); \/\/ `user_balance` is an integer, unsigned, defaults to '0', and column comment is 'balance'<\/code><\/pre>\n<p>Nu antager vi, at vi har en kolonne for <code>user_balance<\/code>, og at vi \u00f8nsker at \u00e6ndre dens type. Fra og med Laravel 10 kan vi simpelthen g\u00f8re dette:<\/p>\n<pre><code class=\"language-php\">$table-&gt;bigInteger('user_balance')-&gt;change(); \/\/ This will change `user_balance` to bigInteger instead of just integer<\/code><\/pre>\n<p>Ovenst\u00e5ende kode vil \u00e6ndre kolonnens type med succes, men vil ogs\u00e5 fjerne attributterne <code>UNSIGNED<\/code>, <code>DEFAULT<\/code> og <code>COMMENT<\/code>. Derfor er det vigtigt at huske at tilf\u00f8je alle attributterne, n\u00e5r du \u00e6ndrer typen af en kolonne:<\/p>\n<pre><code class=\"language-php\">$table-&gt;bigInteger('user_balance')-&gt;unsigned()-&gt;default(0)-&gt;comment('balance')-&gt;change();<\/code><\/pre>\n<p>I tilf\u00e6lde hvor du har flere <a href=\"https:\/\/kinsta.com\/blog\/laravel-database\/\">databaseforbindelser<\/a> og allerede har installeret DBAL, anbefales det at kalde <code>Schema::useNativeSchemaOperationsIfPossible()<\/code> -metoden inden for boot-metoden i <code>AppProvidersAppServiceProvider<\/code> for at kunne bruge native skemaoperationer og for at kunne bruge native operationer, f\u00f8r du stoler p\u00e5 pakken (SQLite underst\u00f8tter f.eks. endnu ikke dette):<\/p>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesSchema;\nclass AppServiceProvider extends ServiceProvider\n{\n  public function boot()\n  {\n    Schema::useNativeSchemaOperationsIfPossible();\n  }\n}<\/code><\/pre>\n<h4>8. Column Type Native Retrieval<\/h4>\n<p>En anden bem\u00e6rkelsesv\u00e6rdig funktion i Laravel 10 er muligheden for at bruge <code>Schema::getColumnType<\/code> -metoden uden at skulle stole p\u00e5 <code>doctrine\/dbal<\/code> -pakken. Vi bruger i \u00f8jeblikket <code>Schema::getColumnType<\/code> med DBAL til at f\u00e5 kolonnetypen. DBAL mapper hver native kolonnetype til dens DBAL-type\u00e6kvivalent, og den underst\u00f8tter ikke mange af de kolonnetyper, der bruges af Laravel p\u00e5 tv\u00e6rs af forskellige databaser.<\/p>\n<p>I Laravel 10 vil den nye <code>Schema::getColumnType<\/code> -metode derimod returnere den faktiske kolonnetype i stedet for dens DBAL-\u00e6kvivalent. Det giver dig ogs\u00e5 mulighed for at skrive integrationstest for den nye native funktion til \u00e6ndring af kolonner. Du kan bruge denne funktion til at f\u00e5 enten navnet p\u00e5 datatypen eller hele typedefinitionen for den angivne kolonne:<\/p>\n<pre><code class=\"language-php\">Schema::getColumnType('products', 'price'); \/\/ decimal<\/code><\/pre>\n<h4>9. Hurtigere Hashing-algoritme<\/h4>\n<p>xxHash er en Hash-algoritme, der er utrolig hurtig. Den har stor tilf\u00e6ldighed og spredning af output samt unikhed for at reducere kollisioner. Da PHP 8.1 giver underst\u00f8ttelse for xxh128, og da Laravel 10 k\u00f8rer p\u00e5 PHP 8.1, er det ideelt at have en s\u00e5 p\u00e5lidelig hash-algoritme i Laravel 10.<\/p>\n<p>Det er v\u00e6rd at n\u00e6vne, at Taylor under sin gennemgang af denne \u00e6ndring <a href=\"https:\/\/github.com\/laravel\/framework\/pull\/45371#issuecomment-1359597016\">fremh\u00e6vede<\/a>, at nogle tredjepartspakker kan v\u00e6re afh\u00e6ngige af, at filnavnene er i det n\u00f8jagtige format som SHA-1-hash, som er den algoritme, som Laravel brugte til hashing. Hvis du planl\u00e6gger en opgradering til Laravel 10, vil det derfor v\u00e6re klogt at dobbelttjekke dette i alle tredjepartspakker, som du bruger i din app.<\/p>\n<h4>10. <code>whereExists()<\/code> Metodeunderst\u00f8ttelse for Eloquent Builder<\/h4>\n<p>I \u00f8jeblikket kr\u00e6ver brugen af <code>whereExists()<\/code>, at den indlejrede foresp\u00f8rgsel konfigureres ved hj\u00e6lp af en lukning. Heldigvis er det med Laravel 10 nu muligt at inkludere en Eloquent Builder som en nested query. Det g\u00f8r det muligt at bruge brugerdefinerede buildermetoder, model scopes osv.<\/p>\n<p>For eksempel g\u00f8r vi normalt dette, hvis vi \u00f8nsker at bruge <code>whereExists()<\/code>:<\/p>\n<pre><code class=\"language-php\">Order::whereExists(function ($query) {\n  $query-&gt;from('products')-&gt;whereColumn('products.order_id', 'orders.id');\n});<\/code><\/pre>\n<p>Med Laravel 10 kan vi bare g\u00f8re dette i stedet:<\/p>\n<pre><code class=\"language-php\">Order::whereExists(\n  Product::whereColumn('products.order_id', 'orders.id')\n);<\/code><\/pre>\n<h4>11. Eager Loading Optimering<\/h4>\n<p>En af de interessante nye funktioner i Laravel 10 er <a href=\"https:\/\/kinsta.com\/dk\/blog\/laravel-ydeevnen\/#11-make-use-of-eager-loading\">eager loading-optimering<\/a>, n\u00e5r der ikke er nogen n\u00f8gler, der skal indl\u00e6ses. Denne \u00e6ndring er mere en rettelse end en funktion, da den tackler et aktuelt problem, hvor eager loading-relationer medf\u00f8rer, at der udf\u00f8res et stort antal umulige foresp\u00f8rgsler.<\/p>\n<p>I \u00f8jeblikket vil Laravel stadig udf\u00f8re en foresp\u00f8rgsel svarende til denne, n\u00e5r der eager-loades relationer, som ikke har nogen n\u00f8gler, der skal indl\u00e6ses:<\/p>\n<pre><code class=\"language-php\">select * from `table_name` where 0 = 1<\/code><\/pre>\n<p>Den nye Laravel 10-opdatering kontrollerer imidlertid, om der overhovedet er nogen n\u00f8gler til r\u00e5dighed, og hvis der ikke er nogen, leverer den en tom samling, hvilket eliminerer behovet for de un\u00f8dvendige databaseforesp\u00f8rgsler.<\/p>\n<h4>12. <code>$path<\/code> Valgfrit for filsystemmetoder<\/h4>\n<p>I Laravel 10 er parameteren <code>$path<\/code> valgfri for nedenst\u00e5ende metoder:<\/p>\n<ul>\n<li><code>FilesystemAdapter#putFile<\/code><\/li>\n<li><code>FilesystemAdapter#putFileAs<\/code><\/li>\n<li><code>UploadedFile#store<\/code><\/li>\n<li><code>UploadedFile#storeAs<\/code><\/li>\n<li><code>UploadedFile#storePublicly<\/code><\/li>\n<li><code>UploadedFile#storePubliclyAs<\/code><\/li>\n<\/ul>\n<p>S\u00e5 i stedet for at g\u00f8re dette for at gemme en uploadet fil p\u00e5 <a href=\"https:\/\/kinsta.com\/dk\/blog\/amazon-s3-backups\/\">Amazon S3<\/a>:<\/p>\n<pre><code class=\"language-php\">Storage::disk('s3')-&gt;putFile(\u2018post\/images', $uploadedFile);<\/code><\/pre>\n<p>&#8230;kan vi g\u00f8re dette:<\/p>\n<pre><code class=\"language-php\">Storage::disk(Disk::PostImages)-&gt;putFile($uploadedFile)<\/code><\/pre>\n<h4>13. Databaseudtryk og grammatikspecifik formatering<\/h4>\n<p>Blot fire dage f\u00f8r udgivelsen af Laravel 10 besluttede Laravel-kerneteamet at sammenl\u00e6gge en genial funktion, der l\u00f8ser en stor udfordring, n\u00e5r man arbejder med flere databaser.<\/p>\n<p>I tidligere versioner, hvis vi arbejdede med PostgreSQL og MySQL og \u00f8nskede at returnere den f\u00f8rste v\u00e6rdi i en liste som et alias, skulle vi skrive r\u00e5 databasekode og g\u00f8re f\u00f8lgende:<\/p>\n<pre><code class=\"language-php\">DB::table(\u2018visitors')\n-&gt;when(isPostgreSQL(), fn ($query) =&gt; $query-&gt;select(DB::raw('coalesce(NULL, \"user\", \"guest\") AS \"First Visitor\"')))\n-&gt;when(isMySQL(), fn ($query) =&gt; $query-&gt;select(DB::raw('coalesce(NULL, `user`, `guest`) AS `First Visitor`')))<\/code><\/pre>\n<p>I ovenst\u00e5ende kode bruger vi <a href=\"https:\/\/www.w3schools.com\/sql\/func_sqlserver_coalesce.asp\" target=\"_blank\" rel=\"noopener noreferrer\">funktionen<code>COALESCE()<\/code><\/a> til at returnere den f\u00f8rste ikke-nul-v\u00e6rdi som et alias ved navn <strong>first visitor<\/strong>. S\u00e5 hver gang vi skal udf\u00f8re en operation som denne, skal vi skrive r\u00e5 databasekode igen.<\/p>\n<p>Den nye funktion g\u00f8r det muligt for os at oprette genanvendelige udtryksklasser, der kun \u00e9n gang implementerer de r\u00e5 udtryk og udsagn, vi har brug for til vores foresp\u00f8rgsler. Dette vil fjerne behovet for at skrive r\u00e5 databasekode, n\u00e5r vi \u00f8nsker at bruge flere databasefunktioner.<\/p>\n<p>Lad os g\u00e5 tilbage til ovenst\u00e5ende eksempel og f\u00f8lge den nye Laravel 10-tilgang for at opn\u00e5 det samme resultat, men uden at bruge r\u00e5 databasekode-syntaks.<\/p>\n<p>F\u00f8rst skal vi oprette to klasser &#8211; en til aliasing og en til brug af <code>COALESCE()<\/code> -funktionen:<\/p>\n<pre><code class=\"language-php\">class Alias implements Expression\n{\n  public function __construct(\n    public readonly Expression|string $expression,\n    public readonly string $name,\n  ) { }\n  public function getValue(Grammar $grammar): string\n  {\n    return match ($grammar-&gt;isExpression($this-&gt;expression)) {\n      true =&gt; \"{$grammar-&gt;getValue($this-&gt;expression)} as {$grammar-&gt;wrap($this-&gt;name)}\",\n      false =&gt; $grammar-&gt;wrap(\"{$this-&gt;name} as {$this-&gt;name}\"),\n    };\n  }\n}\nclass Coalesce implements Expression\n{\n  public function __construct(\n    public readonly array $expressions,\n  ) { }\n  public function getValue(Grammar $grammar): string\n  {\n    $expressions = array_map(function ($expression) use($grammar): string {\n      return match ($grammar-&gt;isExpression($expression)) {\n        true =&gt; $grammar-&gt;getValue($expression),\n        false =&gt; $grammar-&gt;wrap($expression),\n      };\n    }, $this-&gt;expressions);\n    $expressions = implode(', ', $expressions);\n    return \"coalesce({$expressions})\";\n  }\n}<\/code><\/pre>\n<p>Derefter kan vi g\u00f8re dette for at opn\u00e5 det \u00f8nskede resultat for b\u00e5de MySQL og PostgreSQL:<\/p>\n<pre><code class=\"language-php\">DB::table('visitors') -&gt;select(new Alias(new Coalesce([NULL, 'user', 'guest']), 'First Visitor'));<\/code><\/pre>\n<p>Du kan synes, at det er for meget arbejde at skrive, men det er helt sikkert det v\u00e6rd, fordi du kun beh\u00f8ver at skrive det \u00e9n gang, og det sparer dig for besv\u00e6ret med at \u00e6ndre syntaks, n\u00e5r du har med flere databaser at g\u00f8re.<\/p>\n<p>Desuden vil denne \u00e6ndring if\u00f8lge <a href=\"https:\/\/github.com\/laravel\/framework\/pull\/44784\" target=\"_blank\" rel=\"noopener noreferrer\">pull request&#8217;s<\/a> skaber, Tobias Petry, \u00e5bne d\u00f8ren for mange muligheder for pakker, der kan levere de mest almindelige r\u00e5 udtryksklasser til dig. Han erkl\u00e6rede endda, at han vil stille den til r\u00e5dighed for f\u00e6llesskabet i en <a href=\"https:\/\/github.com\/tpetry\/laravel-query-expressions\" target=\"_blank\" rel=\"noopener noreferrer\">dedikeret pakke<\/a> efter Laravel 10&#8217;s udgivelse.<\/p>\n<h4>14. SQL Server Update To Use <code>FETCH<\/code> and <code>OFFSET<\/code> for Queries That Do Not Include an <code>orderBy<\/code><\/h4>\n<p>N\u00e5r vi bruger <code>orderBy<\/code> i en foresp\u00f8rgsel som denne:<\/p>\n<pre><code class=\"language-php\">$builder-&gt;select('*')-&gt;from('users')-&gt;skip(11)-&gt;take(10)-&gt;orderBy('email', 'desc');<\/code><\/pre>\n<p>Laravel producerer derefter en SQL-angivelse, der bruger <a href=\"https:\/\/www.geeksforgeeks.org\/sql-offset-fetch-clause\/\" target=\"_blank\" rel=\"noopener noreferrer\"><code>FETCH<\/code> og <code>OFFSET<\/code>:<\/a><\/p>\n<pre><code class=\"language-sql\">select * from [users] order by [email] desc offset 11 rows fetch next 10 rows only<\/code><\/pre>\n<p>Men i tidligere versioner af Laravel, hvis vi dropper <code>orderBy<\/code> fra foresp\u00f8rgslen, falder den tilbage til den gamle metode til at forskyde resultaterne:<\/p>\n<pre><code class=\"language-php\">$builder-&gt;select('*')-&gt;from('users')-&gt;skip(11)-&gt;take(10);<\/code><\/pre>\n<pre><code class=\"language-sql\">select * from (select *, row_number() over (order by (select 0)) as row_num from [users]) as temp_table where row_num between 11 and 20 order by row_num<\/code><\/pre>\n<p>Men nu i Laravel 10 vil denne <a href=\"https:\/\/github.com\/laravel\/framework\/pull\/44937\" target=\"_blank\" rel=\"noopener noreferrer\">nye opdatering<\/a> g\u00f8re det muligt for din Laravel 10-applikation at bruge <code>FETCH<\/code> og <code>OFFSET<\/code>, selv n\u00e5r <code>orderBy<\/code> ikke er til stede:<\/p>\n<pre><code class=\"language-sql\">select * from [users] order by (SELECT 0) offset 10 rows fetch next 10 rows only<\/code><\/pre>\n<p>Denne opdatering <a href=\"https:\/\/gist.github.com\/dunhamjared\/cb40bbf294ed6f8e48bd60010a31b4f3\" target=\"_blank\" rel=\"noopener noreferrer\">forbedrer hastigheden med 33 %<\/a> og kr\u00e6ver f\u00e6rre eksekveringstrin.<\/p>\n<h4>15. Underst\u00f8ttelse af PHPUnit 10<\/h4>\n<p>Laravel 10 underst\u00f8tter PHPUnit 10. Det er et framework til enhedstest for PHP, og version 10 blev <a href=\"https:\/\/phpunit.de\/announcements\/phpunit-10.html\" target=\"_blank\" rel=\"noopener noreferrer\">udgivet den 3. februar 2023<\/a>. Laravel 10 vil stadig have underst\u00f8ttelse for PHPUnit 9 og 8.<\/p>\n<h4>16. Sikkerhedsforbedringer for <code>Timebox<\/code> Class<\/h4>\n<p>Laravel 10 indeholder sikkerhedsforbedringer for klassen <code>Timebox<\/code>, som har til form\u00e5l at beskytte applikationen mod <a href=\"https:\/\/tom.vg\/papers\/timeless-timing-attack_usenix2020.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">tidl\u00f8se timingangreb<\/a>. Klassen <code>Timebox<\/code> er implementeret inde i metoden <code>hasValidCredentials<\/code>.<\/p>\n<p>Klassen <code>Timebox<\/code> har nu underst\u00f8ttelse til at h\u00e5ndtere undtagelser, der kastes under en Timebox&#8217; callback-eksekvering.<\/p>\n<h4>17. <code>dispatch()<\/code> Metodeadf\u00e6rd er den samme p\u00e5 tv\u00e6rs af Laravel 10<\/h4>\n<p><code>dispatch()<\/code> -metoden inden for <code>DispatchesJobs<\/code> -tr\u00e6kket kontrollerer nu for unikke job p\u00e5 samme m\u00e5de som den globale <code>dispatch()<\/code> -hj\u00e6lpefunktion. Dette g\u00f8r, at <code>dispatch()<\/code> -metoderne anvender de samme funktionaliteter p\u00e5 tv\u00e6rs af Laravel 10.<\/p>\n<h4>18. Laravel Pennant<\/h4>\n<p>Hvis du nogensinde har arbejdet p\u00e5 en webapplikation, der konstant opdateres med nye funktioner, forst\u00e5r du, hvor afg\u00f8rende funktionsflag er. Ikke desto mindre ville det kr\u00e6ve en betydelig m\u00e6ngde arbejde at bevare feature flags for at g\u00f8re det rigtigt, men bare rolig, Laravel har d\u00e6kket dig med den nye f\u00f8rstepartspakke Laravel Pennant.<\/p>\n<p><a href=\"https:\/\/laravel.com\/docs\/10.x\/pennant\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Pennant<\/a> giver en brugervenlig l\u00f8sning til vedligeholdelse af funktionsflag. Den leveres endda med en in-memory array-driver og en database.<\/p>\n<p>Du kan nemt definere en ny funktion:<\/p>\n<pre><code class=\"language-php\">use LaravelPennantFeature;\nuse IlluminateSupportLottery;\nFeature::define('new-color-button', function () {\nreturn Lottery::odds(1, 10);\n});<\/code><\/pre>\n<p>S\u00e5 kan du kontrollere, om brugeren har adgang til denne funktion eller ej:<\/p>\n<pre><code class=\"language-php\">use LaravelPennantFeature;\nif (Feature::active('new-color-button')) {\n  \/\/ ...\n}<\/code><\/pre>\n<p>Det ser endda p\u00e6nere ud i Laravel Blade:<\/p>\n<pre><code class=\"language-php\">@feature('new-color-button')\n\/\/ Kinsta Rules!!\n@endfeature<\/code><\/pre>\n<h4>19. Laravel Process Interaction<\/h4>\n<p>De nye procesinteraktioner i Laravel 10 g\u00f8r det nemt at teste og k\u00f8re CLI-processer. Den tilbyder et simpelt API for at lette byrden ved testning. Lad os tage eksemplet fra den <a href=\"https:\/\/github.com\/laravel\/framework\/pull\/45314\" target=\"_blank\" rel=\"noopener noreferrer\">oprindelige PR<\/a> for funktionen af Taylor:<\/p>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesProcess;\n$result = Process::run('ls -la');\n$result-&gt;successful();\n$result-&gt;failed();\n$result-&gt;exitCode();\n$result-&gt;output();\n$result-&gt;errorOutput();\n$result-&gt;throw();\n$result-&gt;throwIf(condition);<\/code><\/pre>\n<p>Du har sikkert bem\u00e6rket, hvor enkel og ren ovenst\u00e5ende kode er. Hvis vi g\u00e5r videre til opbygningsprocesser, bliver det kun bedre:<\/p>\n<pre><code class=\"language-php\">$result = Process::timeout(60)-&gt;path(base_path())-&gt;env([...])-&gt;run('ls -la');\n$result = Process::forever()-&gt;run('ls -la');<\/code><\/pre>\n<p>Hvis du vil bruge denne nye funktion i test, kan du oprette en ny og falsk proces som denne:<\/p>\n<pre><code class=\"language-php\">Process::fake([\n  'ls *' =&gt; Process::result('Hello From Kinsta'),\n]);<\/code><\/pre>\n<p>Derefter kan du k\u00f8re den falske proces og bruge de nyligt <a href=\"https:\/\/laravel.com\/docs\/10.x\/processes#available-assertions\" target=\"_blank\" rel=\"noopener noreferrer\">tilg\u00e6ngelige assertions<\/a>:<\/p>\n<pre><code class=\"language-php\">$result = Process::run('ls -la');\nProcess::assertRan(function ($process, $result) {\n  return $process-&gt;command == 'ls -la';\n});\nProcess::assertRanTimes(function ($process, $result) {\n  return $process-&gt;command == 'ls -la';\n}, times: 1);\nProcess::assertNotRan(function ($process, $result) {\n  return $process-&gt;command == 'cat foo';\n});<\/code><\/pre>\n<h4>20. Pest Scaffolding<\/h4>\n<p>Pest test scaffolding er nu aktiveret som standard, n\u00e5r du opretter nye Laravel-projekter. For at aktivere denne funktion skal du bruge flaget <code>--pest<\/code>, n\u00e5r du opretter en ny app med Laravel-installationsprogrammet:<\/p>\n<pre><code class=\"language-php\">laravel new example-kinsta-app --pest<\/code><\/pre>\n<h4>21. String Password Hj\u00e6lpefunktion<\/h4>\n<p>Laravel 10 kan oprette en tilf\u00e6ldig og sikker adgangskode med en given l\u00e6ngde:<\/p>\n<pre><code class=\"language-php\">$password = Str::password(12);<\/code><\/pre>\n<h3>Deprecated Metoder og pakker i Laravel 10<\/h3>\n<p>Dern\u00e6st vil vi se p\u00e5 de pakker og metoder, der blev udg\u00e5et med udgivelsen af Laravel 10.<\/p>\n<h4>Laravel 10 siger farvel til PHP 8.0<\/h4>\n<p>Laravel framework dropper underst\u00f8ttelsen af PHP 8.0 i Laravel 10. Derfor skal du, hvis du planl\u00e6gger at opgradere din app til Laravel 10, f\u00f8rst opdatere PHP-versionen til <a href=\"https:\/\/kinsta.com\/blog\/php-8-1\/\">PHP 8.1<\/a> eller <a href=\"https:\/\/kinsta.com\/dk\/blog\/php-8-2\/\">PHP 8.2<\/a>.<\/p>\n<h4>Fjernelse af for\u00e6ldede metoder<\/h4>\n<p><a href=\"https:\/\/laravel.com\/docs\/10.x\/upgrade\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel-dokumentationen<\/a> er opdateret med alle \u00e6ndringer og vigtige deprecations. Hvis du skal migrere et nuv\u00e6rende projekt til Laravel 10, skal al kode, der bruger en deprecated metode, omskrives i en ny metode for at opn\u00e5 samme resultat.<\/p>\n<p>Her er en liste over nogle af deprecations:<\/p>\n<ul>\n<li><code>Route::home<\/code> -metoden (deprecated i Laravel 9)<\/li>\n<li>Funktioner og metoder omkring <code>dispatchNow<\/code>, deprecated for at tilskynde udviklere til at bruge <a href=\"https:\/\/laravel.com\/docs\/10.x\/queues#synchronous-dispatching\" target=\"_blank\" rel=\"noopener noreferrer\"><code>dispatchSync<\/code><\/a>, den eneste underst\u00f8ttede metode til \u00f8jeblikkelig afsendelse<\/li>\n<li>Metoden <code>getBaseQuery<\/code>, som har en <code>toBase<\/code> \u00e6kvivalent<\/li>\n<li>Klassen <code>MaintenanceModeException<\/code><\/li>\n<li>Den <code>MocksApplicationServices<\/code> egenskab<\/li>\n<li>Den falske mail-metode <code>Mail::failures<\/code><\/li>\n<li><code>$dates<\/code> -egenskaben (brug <a href=\"https:\/\/laravel.com\/docs\/9.x\/eloquent-mutators#attribute-casting\" target=\"_blank\" rel=\"noopener noreferrer\"><code>$casts<\/code><\/a> i stedet)<\/li>\n<li>Metoden <code>assertTimesSent()<\/code><\/li>\n<li>Underst\u00f8ttelse af Predis 1 og DBAL 2<\/li>\n<li>Alle relaterede deprecations i <code>doctrine\/dbal<\/code>, siden Laravel droppede underst\u00f8ttelse af version 2<\/li>\n<\/ul>\n<h2>S\u00e5dan installeres Laravel 10<\/h2>\n<p>Laravel-kerneteamet s\u00f8rgede for, at alle udviklere nemt kunne f\u00e5 adgang til rammen p\u00e5 forskellige milj\u00f8er. Derfor er der forskellige m\u00e5der at komme i gang med Laravel 10 p\u00e5 din maskine p\u00e5, og du kan helt frit v\u00e6lge den metode, der fungerer bedst for dig.<\/p>\n<h3>Installer Laravel 10 p\u00e5 MacOS<\/h3>\n<p>Du kan nemt komme i gang med Laravel 10 p\u00e5 MacOS ved at bruge <a href=\"https:\/\/kinsta.com\/dk\/blog\/hvad-er-docker\/\">Docker<\/a> og <a href=\"https:\/\/laravel.com\/docs\/10.x\/sail\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Sail<\/a>. Du kan k\u00f8re f\u00f8lgende terminalkommando fra den mappe, hvor du vil have applikationen installeret, og husk, at kun alfanumeriske tegn, bindestreger og understregninger er tilladt i app-navnet:<\/p>\n<pre><code class=\"language-bash\">curl -s \"https:\/\/laravel.build\/example-kinsta-app\" | bash<\/code><\/pre>\n<p>N\u00e5r installationsprocessen er afsluttet, skal du g\u00e5 til projektmappen og bruge Sail til at k\u00f8re dit nye projekt ved at trykke p\u00e5 f\u00f8lgende kommando i terminalen:<\/p>\n<pre><code class=\"language-bash\">.\/vendor\/bin\/sail up<\/code><\/pre>\n<p>Sail vil bruge sin indbyggede l\u00f8sning til at k\u00f8re dit Laravel-projekt ved hj\u00e6lp af Docker, og n\u00e5r det er f\u00e6rdigt, vil din applikation v\u00e6re klar p\u00e5 <code>http:\/\/localhost<\/code>.<\/p>\n<h3>Installer Laravel 10 p\u00e5 Windows 10 og 11<\/h3>\n<p><a href=\"https:\/\/docs.docker.com\/desktop\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker Desktop<\/a> kan bruges til hurtigt at installere Laravel 10 p\u00e5 Windows. Uanset om du bruger Windows 10 eller 11, skal du dog f\u00f8rst aktivere en af de to f\u00f8lgende muligheder p\u00e5 din maskine:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/install\" target=\"_blank\" rel=\"noopener noreferrer\">Windows Subsystem for Linux 2 (WSL2)<\/a><\/strong> er en Windows-operativsystemfunktion, der g\u00f8r det muligt at k\u00f8re et Linux-filsystem og Linux-kommandolinjev\u00e6rkt\u00f8jer direkte p\u00e5 Windows.<\/li>\n<li><strong><a href=\"https:\/\/learn.microsoft.com\/en-us\/virtualization\/hyper-v-on-windows\/quick-start\/enable-hyper-v\" target=\"_blank\" rel=\"noopener noreferrer\">Hyper-V Backend-funktion<\/a><\/strong> giver dig mulighed for at oprette og betjene en softwareversion af en computer, der er kendt som en virtuel maskine.<\/li>\n<\/ul>\n<p>S\u00e5 snart du har opfyldt alle <a href=\"https:\/\/docs.docker.com\/desktop\/install\/windows-install\/#install-docker-desktop-on-windows\" target=\"_blank\" rel=\"noopener noreferrer\">Docker-kravene<\/a>, kan du k\u00f8re f\u00f8lgende kommando i din terminal:<\/p>\n<pre><code class=\"language-bash\">curl -s https:\/\/laravel.build\/example-kinsta-app | bash<\/code><\/pre>\n<p>Brug derefter Sail til at k\u00f8re din applikation p\u00e5 <code><a href=\"http:\/\/localhost\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost<\/a><\/code> ved at trykke p\u00e5 f\u00f8lgende kommando fra rodmappen i dit nyligt installerede Laravel 10-projekt:<\/p>\n<pre><code class=\"language-bash\">.\/vendor\/bin\/sail up<\/code><\/pre>\n<p>P\u00e5 en sidebem\u00e6rkning, mange udviklere foretr\u00e6kker Linux OS frem for andre operativsystemer, da det giver dem mulighed for at arbejde mere effektivt og hurtigt. Med WSL kan du nyde godt af <a href=\"https:\/\/ubuntu.com\/tutorials\/install-ubuntu-on-wsl2-on-windows-10#1-overview\" target=\"_blank\" rel=\"noopener noreferrer\">Ubuntus<\/a> sikkerhed, ydeevne og spilkompatibilitet. Ubuntu er en Linux-distribution eller en version af Linux, der er kendt for sin brugervenlighed.<\/p>\n<p>Det anbefales, at du bruger <a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code<\/a> og installerer den officielle Microsoft <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode-remote.remote-wsl\" target=\"_blank\" rel=\"noopener noreferrer\">WSL-udvidelse<\/a> for at kunne \u00e5bne enhver mappe i Windows Subsystem for Linux og drage fordel af hele vscodes funktionss\u00e6t. Derudover er <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode-remote.vscode-remote-extensionpack\" target=\"_blank\" rel=\"noopener noreferrer\">Remote Development<\/a> extension en anden mulighed, som der henvises til i Laravel-dokumentationen.<\/p>\n<h3>Installer Laravel 10 med Composer<\/h3>\n<p>Uanset om du bruger macOS eller Windows, kan Composer f\u00e5 dig op at k\u00f8re med Laravel 10 p\u00e5 ingen tid.<\/p>\n<p>Du skal f\u00f8rst sikre dig, at du har PHP \u2264 8.1, node, npm og Composer installeret p\u00e5 din maskine.<\/p>\n<ul>\n<li><strong>For macOS:<\/strong> Composer kan installeres ved hj\u00e6lp af <a href=\"https:\/\/brew.sh\/\" target=\"_blank\" rel=\"noopener noreferrer\">Homebrew<\/a>.<\/li>\n<li><strong>Til Windows:<\/strong> Den seneste stabile version af Composer kan downloades fra det <a href=\"https:\/\/getcomposer.org\/doc\/00-intro.md#installation-windows\" target=\"_blank\" rel=\"noopener noreferrer\">officielle Composer-websted<\/a>.<\/li>\n<\/ul>\n<p>N\u00e5r du har gjort det, kan du installere Laravel Installer globalt og bruge det til at installere din nye Laravel 10-applikation:<\/p>\n<pre><code class=\"language-bash\">composer global require laravel\/installer\nlaravel new example-kinsta-app<\/code><\/pre>\n<p>Eller du kan oprette en ny Laravel 10-app direkte ved kun at bruge Composer:<\/p>\n<pre><code class=\"language-bash\">composer create-project laravel\/laravel example-kinsta-app<\/code><\/pre>\n<h2>S\u00e5dan installeres Laravel 11<\/h2>\n<p>Vi er stadig et \u00e5r fra udgivelsen af Laravel 11. Laravel 11 er dog i \u00f8jeblikket tilg\u00e6ngelig, s\u00e5 du kan teste dens funktioner. Ikke alene er den tilg\u00e6ngelig, men den indeholder ogs\u00e5 <a href=\"https:\/\/github.com\/laravel\/framework\/pulls?q=is%3Apr+is%3Amerged+%5B11.x%5D+in%3Atitle\" target=\"_blank\" rel=\"noopener noreferrer\">nogle sammenlagte PR&#8217;er<\/a> p\u00e5 GitHub, s\u00e5som at droppe PHP 8.1-underst\u00f8ttelsen.<\/p>\n<p>Flaget <code>--dev<\/code> i Laravel Installer installerer mastergrenen fra <code>laravel\/laravel<\/code> -repositoriet, og nu hvor Laravel 10 er ude, vil Laravel 11 v\u00e6re tilg\u00e6ngelig p\u00e5 mastergrenen. Hvis du bruger Laravel Installer, skal du blot k\u00f8re denne kommando i din terminal:<\/p>\n<pre><code class=\"language-php\">laravel new example-kinsta-app --dev<\/code><\/pre>\n<p>Eller, hvis du foretr\u00e6kker at bruge <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer<\/a>:<\/p>\n<pre><code class=\"language-php\">composer create-project --prefer-dist laravel\/laravel example-kinsta-app dev-master<\/code><\/pre>\n<p>For bedre at forst\u00e5 Composer-kommandoen er der her en kort forklaring:<\/p>\n<ul>\n<li><strong><code>laravel\/laravel<\/code>:<\/strong> Pakken til Laravel-installationen<\/li>\n<li><strong><code>example-kinsta-app<\/code>:<\/strong> Den nye mappe til dit nye projekt (kan \u00e6ndres)<\/li>\n<li><strong><code>dev-master<\/code>:<\/strong> Den n\u00e6ste version af Laravel (i dette tilf\u00e6lde Laravel 11)<\/li>\n<\/ul>\n<p>N\u00e5r du har installeret Laravel 11, kan du bekr\u00e6fte versionen ved at navigere til den nye mappe <strong>example-kinsta-app<\/strong> og k\u00f8re denne Artisan-kommando:<\/p>\n<pre><code class=\"language-php\">$ php artisan --version\nLaravel Framework 11.x-dev<\/code><\/pre>\n<h2>S\u00e5dan opgraderer du et projekt til Laravel 10<\/h2>\n<p>Er du fristet til at opgradere til Laravel 10? Laravel core teamet arbejder h\u00e5rdt p\u00e5 dokumentation for at give en problemfri og ligetil opgraderingsguide, samtidig med at alle mulige breaking change d\u00e6kkes. Du er velkommen til at tjekke den <a href=\"https:\/\/laravel.com\/docs\/master\/upgrade#upgrade-10.0\" target=\"_blank\" rel=\"noopener noreferrer\">officielle Laravel 10-opgraderingsguide<\/a>.<\/p>\n<p>Du b\u00f8r ogs\u00e5 holde \u00f8je med <a href=\"https:\/\/laravelshift.com\/shifts\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Shift<\/a> nu, hvor Laravel 10 er blevet frigivet. Laravel Shift tilbyder en enkel og automatiseret tilgang til at opgradere din Laravel-version.<\/p>\n<h2>S\u00e5dan distribueres Laravel 10-projekter<\/h2>\n<p>Implementering af Laravel 10 er ikke anderledes end <a href=\"https:\/\/docs.sevalla.com\/templates\/overview#laravel\">implementering af Laravel 9-projekt<\/a>.<\/p>\n<p>Her er serverkravene:<\/p>\n<ul>\n<li>PHP \u2264 8.1<\/li>\n<li>Ctype PHP-udvidelse<\/li>\n<li>cURL PHP-udvidelse<\/li>\n<li>DOM PHP-udvidelse<\/li>\n<li>Fileinfo PHP-udvidelse<\/li>\n<li>Mbstring PHP-udvidelse<\/li>\n<li>OpenSSL PHP-udvidelse<\/li>\n<li>PCRE PHP-udvidelse<\/li>\n<li>PDO PHP-udvidelse<\/li>\n<li>Tokenizer PHP-udvidelse<\/li>\n<li>XML PHP-udvidelse<\/li>\n<li>Filter PHP-udvidelse<\/li>\n<li>Hash PHP-udvidelse<\/li>\n<li>Session PHP-udvidelse<\/li>\n<\/ul>\n<p>Du kan implementere og <a href=\"https:\/\/sevalla.com\/application-hosting\/\">hoste dit Laravel 10-projekt<\/a> p\u00e5 Kinsta i l\u00f8bet af f\u00e5 minutter, da Laravel er en af en lang liste af <a href=\"https:\/\/docs.sevalla.com\/applications\/reference\/faqs\">underst\u00f8ttede frameworks<\/a> til hostede apps.<\/p>\n<h3>Udrulning af Laravel 10 p\u00e5 Kinsta: Trin-for-trin-guide<\/h3>\n<p>Der er flere fordele ved at <a href=\"https:\/\/sevalla.com\/application-hosting\/\">hoste og distribuere dine Laravel applikationer p\u00e5 Kinsta<\/a>, herunder at du ikke beh\u00f8ver at bekymre dig om konfigurationen af distributionen.<\/p>\n<p>Kinsta tilbyder et brugervenligt, men kraftfuldt v\u00e6rkt\u00f8j til at implementere applikationer, oprette forbindelse til databaser og overv\u00e5ge live-ydelse. Dette v\u00e6rkt\u00f8j er kendt som <a href=\"https:\/\/kinsta.com\/dk\/mykinsta\/\">MyKinsta<\/a>, og i dette afsnit vil vi gennemg\u00e5 trinene for at implementere en Laravel 10-applikation ved hj\u00e6lp af det.<\/p>\n<h4>1. Forbered din applikation<\/h4>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-22.png\" alt=\"Et eksempel p\u00e5 en Laravel 10-applikationsside, der viser \"Laravel Kinsta\" \u00f8verst efterfulgt af et gitter med fire indholdsbokse med etiketterne \"Kinsta\", \"Laracasts\", \"Laravel News\" og \"Vibrand Ecosystem\".\" width=\"1024\" height=\"473\"><figcaption class=\"wp-caption-text\">Hjemmesiden for en Laravel 10-applikation, der er implementeret p\u00e5 Kinsta.<\/figcaption><\/figure>\n<p>Hvis vi antager, at du har en Laravel 10-applikation lokalt, skal vi sikre os, at den har et <a href=\"https:\/\/kinsta.com\/blog\/what-is-github\/\">GitHub-repositorium tilg\u00e6ngeligt<\/a>. Vi vil bruge dette repository til at implementere applikationen senere.<\/p>\n<p>Du kan inkludere en <strong>.htaccess<\/strong>-fil i rodmappen for din applikation, der indeholder f\u00f8lgende:<\/p>\n<pre><code class=\"language-bash\">&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteRule ^(.*)$ public\/$1 [L]\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>For Laravel omdirigerer dette alle anmodninger til <strong>public\/index.php<\/strong>. Hvis det er n\u00f8dvendigt, kan du dog opdatere denne kommando, mens du tilf\u00f8jer din applikation (<strong>trinet Ops\u00e6tningaf dine processer<\/strong>) eller efter implementeringen p\u00e5 applikationens side <strong>Processer<\/strong>. Du kan bruge:<\/p>\n<ul>\n<li><code>heroku-php-apache2 \/public<\/code><\/li>\n<li><code>php artisan serve --host 0.0.0.0 --port 8080<\/code><\/li>\n<\/ul>\n<h4>2. Log ind p\u00e5 MyKinsta<\/h4>\n<figure style=\"width: 999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-23.png\" alt=\"En loginformular til MyKinsta, der viser \"MyKinsta Login\" \u00f8verst efterfulgt af \"E-mail og \"Password\" felter, med en lilla \"Login\" knap nederst.\" width=\"999\" height=\"674\"><figcaption class=\"wp-caption-text\">MyKinsta-loginsiden.<\/figcaption><\/figure>\n<p>G\u00e5 til <a href=\"https:\/\/my.kinsta.com\/login?lang=da\" target=\"_blank\" rel=\"noopener noreferrer\">MyKinsta-loginsiden<\/a>, og indtast din e-mailadresse og adgangskode. Hvis du endnu ikke har en konto, kan du <a href=\"https:\/\/kinsta.com\/dk\/tilmelding\/?product_type=app-db\">registrere en ny konto<\/a> og f\u00e5 20 USD rabat p\u00e5 din f\u00f8rste m\u00e5ned med <a href=\"https:\/\/kinsta.com\/dk\/prissaetning\/?plan=visits-business1#application-hosting\">et abonnement p\u00e5 et hvilket som helst prisabonnement<\/a>.<\/p>\n<h4>3. Godkend Kinsta p\u00e5 GitHub<\/h4>\n<p>N\u00e5r du logger ind, vil du bem\u00e6rke, at dashboardet har muligheder for at <a href=\"https:\/\/kinsta.com\/dk\/blog\/cloud-platform-for-udviklere\/#wp\">oprette et WordPress-websted<\/a>, <a href=\"https:\/\/kinsta.com\/dk\/blog\/cloud-platform-for-udviklere\/#app\">oprette en applikation<\/a> eller <a href=\"https:\/\/kinsta.com\/dk\/blog\/cloud-platform-for-udviklere\/#db\">oprette en database<\/a>. Vi vil trykke p\u00e5 knappen <strong>Connect GitHub<\/strong> for at <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#authenticate-and-authorize\">integrere med GitHub<\/a>.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-24.png\" alt=\"En del af MyKinsta-dashboardet, der viser tre rektangul\u00e6re fliser: \"WordPress-websted\" med en \"Opret et websted\"-handlingsknap; \"Applikation\" med en \"Connect GitHub\" handlingsknap; og \"Database\" med en \"Opret database\"-handlingsknap.\" width=\"1024\" height=\"430\"><figcaption class=\"wp-caption-text\">MyKinsta-dashboardet.<\/figcaption><\/figure>\n<p>Derefter skal du klikke p\u00e5 knappen <strong>Continue with GitHub<\/strong>. Hvis du ikke allerede er logget ind p\u00e5 GitHub, f\u00e5r du vist muligheden for at logge ind. Derefter kan du give Kinsta GitHub-applikationen tilladelse til at f\u00e5 adgang til din GitHub-konto ved at v\u00e6lge <strong>Authorize Kinsta<\/strong>.<\/p>\n<p>Til sidst omdirigerer GitHub din browser til MyKinsta for at forts\u00e6tte med at konfigurere applikationen.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-25.png\" alt=\"Et modalt vindue, der siger \"GitHub Integration: Forbind Kinsta til dit Gitub-navneomr\u00e5de her for at importere dine eksisterende repositories\" med en hvid \"Annuller\"-knap og en lilla \"Forts\u00e6t med GitHub\"-knap.\" width=\"1024\" height=\"271\"><figcaption class=\"wp-caption-text\">Tilslutning af MyKinsta til GitHub.<\/figcaption><\/figure>\n<p>N\u00e5r du er forbundet til GitHub, vises popup-vinduet <strong>Tilf\u00f8j applikation<\/strong>\/modalmen, som har en dropdown-menu, hvor du kan v\u00e6lge et GitHub-repositorium. Klik p\u00e5 feltet GitHub-repository, og v\u00e6lg <strong>Edit GitHub-permissions<\/strong>\u00a0i rullemenuen.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-26.png\" alt=\"Formularen \"Tilf\u00f8j ans\u00f8gning\" i MyKinsta fokuserede p\u00e5 underafsnittet \"Ans\u00f8gningsdetaljer\" med teksten \"V\u00e6lg gren\" efterfulgt af to felter: \"GitHub-lager\" og \"Standardgren\".\" width=\"1024\" height=\"430\"><figcaption class=\"wp-caption-text\">Tilf\u00f8jelse af en applikation til MyKinsta.<\/figcaption><\/figure>\n<p>Dette \u00e5bner en ny fane i din browser til GitHub-websiden, hvor du kan v\u00e6lge, hvilke data Kinsta skal kunne f\u00e5 adgang til. I stedet for at aktivere adgang til alle repositorier kan du overveje kun at v\u00e6lge det\/de repositorier, som Kinsta skal bruge.<\/p>\n<p>Klik p\u00e5 <strong>Kun valgte repositorier<\/strong>, og v\u00e6lg det repositorium, du \u00f8nsker at implementere.<\/p>\n<figure style=\"width: 674px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-27.png\" alt=\"En \"Installer Kinsta\"-prompt, der viser muligheder for at tillade adgang til \"Alle lagre\" eller \"V\u00e6lg kun lagre\" efterfulgt af en gr\u00f8n \"Installer\" knap.\" width=\"674\" height=\"1024\"><figcaption class=\"wp-caption-text\">Giv Kinsta adgang til GitHub.<\/figcaption><\/figure>\n<p>Klik derefter p\u00e5 <strong>Installer<\/strong>, og du er klar!<\/p>\n<p>N\u00e5r du vender tilbage til MyKinsta og klikker p\u00e5 <strong>GitHub-repository<\/strong>-feltet, skal det autoriserede repository v\u00e6re synligt. Derudover kan du markere afkrydsningsfeltet <strong>Automatic deployment on commit<\/strong> for at aktivere MyKinsta til automatisk at udrulle din applikation, s\u00e5 snart du foretager \u00e6ndringer i GitHub-repositoriet.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-28.png\" alt=\"\"V\u00e6lg gren\" applikationssektionen i MyKinsta, der viser de to felter \"GitHub repository\" og \"Default branch\" og et afkrydset afkrydsningsfelt m\u00e6rket \"Automatic deployment on commit\".\" width=\"1024\" height=\"287\"><figcaption class=\"wp-caption-text\">Valg af en repository-gren til MyKinsta.<\/figcaption><\/figure>\n<h4>4. Tilf\u00f8j grundl\u00e6ggende oplysninger om applikationen<\/h4>\n<p>Du kan nu give applikationen et navn, der kun vil blive brugt i dashboardet, og v\u00e6lge mellem 25 datacenterplaceringer, s\u00e5 du kan placere din applikation p\u00e5 den geografiske placering, der er t\u00e6ttest p\u00e5 dine brugere. Hvis du har brug for hj\u00e6lp til at bestemme, hvilket <a href=\"https:\/\/kinsta.com\/docs\/service-information\/data-center-locations\/\">datacenter<\/a> der er ideelt for din applikation, kan du l\u00e6se vores vejledning til <a href=\"https:\/\/kinsta.com\/docs\/service-information\/data-center-locations\/\">valg af den rigtige datacenterplacering<\/a>.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-29.png\" alt=\"Sektionen \"Grundl\u00e6ggende detaljer\" i MyKinsta-applikationsoprettelsesprocessen, der viser felter for \"Applikationsnavn\" og \"Datacenterplacering\".\" width=\"1024\" height=\"423\"><figcaption class=\"wp-caption-text\">Tilf\u00f8jelse af en applikations grundl\u00e6ggende oplysninger.<\/figcaption><\/figure>\n<h4>5. Tilf\u00f8j milj\u00f8variabler<\/h4>\n<p>Det f\u00f8lgende afsnit er til tilf\u00f8jelse af <a href=\"https:\/\/kinsta.com\/blog\/what-is-an-environment-variable\/\">milj\u00f8variabler<\/a>, og den vigtigste variabel er <code>APP_KEY<\/code>.<\/p>\n<p>Hvis du ikke allerede har en n\u00f8gle i din .env-fil, kan du generere en ved hj\u00e6lp af en <a href=\"https:\/\/generate-random.org\/laravel-key-generator\" target=\"_blank\" rel=\"noopener noreferrer\">online Laravel-n\u00f8glegenerator<\/a>. Inds\u00e6t derefter <code>APP_KEY<\/code> i feltet <strong>Key 1<\/strong> og inds\u00e6t den genererede app-n\u00f8gle i feltet <strong>Value 1<\/strong>.<\/p>\n<p>Endelig skal du v\u00e6lge <strong>Tilg\u00e6ngelig under k\u00f8rselstid<\/strong> og <strong>Tilg\u00e6ngelig under byggeprocessen<\/strong>.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-30.png\" alt=\"\"Milj\u00f8variabler\" applikationssektionen i MyKinsta, der viser felter for \"N\u00f8gle 1\" og \"V\u00e6rdi 1\" samt afkrydsningsfelter for \"Tilg\u00e6ngelig under k\u00f8rsel\" og \"Tilg\u00e6ngelig under byggeproces\".\" width=\"1024\" height=\"408\"><figcaption class=\"wp-caption-text\">Tilf\u00f8jelse af milj\u00f8variabler i MyKinsta.<\/figcaption><\/figure>\n<h4>6. Konfigurer opbygningsmilj\u00f8<\/h4>\n<p>Det magiske her er, at du ikke beh\u00f8ver at konfigurere noget som helst! Du kan forts\u00e6tte ved at klikke p\u00e5 knappen <strong>Forts\u00e6t<\/strong>, og voil\u00e0: Du har afsluttet konfigurationen af det byggede milj\u00f8. Hvis du imidlertid \u00f8nsker at forbedre buildressourcerne for at sikre hurtigere opbygning, kan du v\u00e6lge dit foretrukne valg fra feltet <strong>Build resources (opbygningsressourcer)<\/strong>.<\/p>\n<p>Feltet <strong>Bygningssti<\/strong> er valgfrit. Du kan lade det v\u00e6re tomt, og MyKinsta vil bruge rodmappen.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-31.png\" alt=\"Applikationssektionen \"Byg milj\u00f8\" i MyKinsta med felter og valgbokse for \"Byg ressourcer\", \"Ops\u00e6t containerbillede automatisk\" og \"Brug Dockerfile til at ops\u00e6tte containerbillede\".\" width=\"1024\" height=\"742\"><figcaption class=\"wp-caption-text\">Konfigurering af applikationens opbygningsmilj\u00f8.<\/figcaption><\/figure>\n<h4>7. Ops\u00e6tning af processer og betalingsmetode<\/h4>\n<p>For afsnittet Ressourcer skal du udfylde hvert felt med f\u00f8lgende oplysninger:<\/p>\n<ul>\n<li><strong>Procesnavn:<\/strong> Det navn, der vises p\u00e5 listen over din applikations processer.<\/li>\n<li><strong>Process type:<\/strong> V\u00e6lg omhyggeligt, da dette ikke kan \u00e6ndres, n\u00e5r det f\u00f8rst er indstillet. Du kan dog tilf\u00f8je og \u00e6ndre yderligere processer, f.eks. et baggrundsjob, p\u00e5 siden Processer i applikationen efter implementeringen.<\/li>\n<li><strong>Startkommando:<\/strong> Start: Kommandoen &#8220;Start&#8221; for din proces (ikke p\u00e5kr\u00e6vet).<\/li>\n<li><strong>Pod-st\u00f8rrelse:<\/strong> Den pod-kapacitet, du forventer, at du har brug for til din proces.<\/li>\n<li><strong>Antal instanser:<\/strong> Antallet af instanser for din proces (maks. 50).<\/li>\n<\/ul>\n<p>Bem\u00e6rk, at du blot kan klikke p\u00e5 <strong>Forts\u00e6t<\/strong> uden at udfylde feltet <strong>Startkommando<\/strong>, da Kinsta automatisk registrerer den n\u00f8dvendige kommando under den f\u00f8rste implementering.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-32.png\" alt=\"Sektionen \"Tilf\u00f8j applikation: Konfigurer din proces\" i MyKinsta, der viser felter for \"Procesnavn\", \"Procestype\", \"Startkommando\", \"Podst\u00f8rrelse\" og \"Antal forekomster\".\" width=\"1024\" height=\"640\"><figcaption class=\"wp-caption-text\">Ops\u00e6tning af applikationens processer.<\/figcaption><\/figure>\n<p>I det sidste trin skal du gennemg\u00e5 de m\u00e5nedlige forbrugsomkostninger, der er beregnet for din app, og derefter bekr\u00e6fte din betalingsmetode. N\u00e5r du er f\u00e6rdig, skal du klikke p\u00e5 knappen <strong>Bekr\u00e6ft betalingsmetode<\/strong>.<\/p>\n<figure style=\"width: 902px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-33.png\" alt=\"Sk\u00e6rmbilledet med betalingsoplysninger i MyKinsta, der viser \"M\u00e5nedlige forbrugsomkostninger\" og \"Betalingsmetode\", hvoraf sidstn\u00e6vnte viser et Visa-kort.\" width=\"902\" height=\"744\"><figcaption class=\"wp-caption-text\">Bekr\u00e6ft betalingsoplysninger.<\/figcaption><\/figure>\n<p>Og du er f\u00e6rdig! Kinsta vil g\u00f8re alt arbejdet i baggrunden for at betjene din applikation.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-34.png\" alt=\"Fanen \"Applikationer\" i Mykinsta, der viser en implementeret applikation ved navn \"eksempel-kinsta-app\" sammen med dens kilde, type og sidste \u00e6ndringsdato.\" width=\"1024\" height=\"335\"><figcaption class=\"wp-caption-text\">Indl\u00e6sning af applikationens implementeringsproces.<\/figcaption><\/figure>\n<p>Derefter f\u00e5r du adgang til alle detaljerne i implementeringsprocessen samt den midlertidige URL-adresse for live-appen, som du senere kan erstatte med dit eget dom\u00e6ne.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-35.png\" alt=\"Afsnittet \"Deployment details\" i MyKinsta efter succesfuld implementering af appen, der viser applikationens installationsoplysninger sammen med build- og implementeringsbekr\u00e6ftelsesmeddelelser.\" width=\"1024\" height=\"746\"><figcaption class=\"wp-caption-text\">Vellykket implementering af Laravel 10-applikation p\u00e5 MyKinsta.<\/figcaption><\/figure>\n<p>Din Laravel 10-applikation er nu live p\u00e5 Kinsta, men hvad nu hvis du har brug for at foretage en \u00e6ndring i produktionen? Hvad hvis vi \u00f8nsker at \u00e6ndre et ankertag&#8217;s <code>href<\/code> -attribut?<\/p>\n<p>Da vi har aktiveret indstillingen <strong>Automatisk implementering ved commit<\/strong>, vil MyKinsta registrere alle \u00e6ndringer, vi foretager i den implementerede gren, og automatisk opdatere live-appen i overensstemmelse hermed.<\/p>\n<h4>8. Forbind Laravel 10 til MySQL-database<\/h4>\n<p>Nu hvor vi har implementeret vores Laravel 10-applikation, kan vi uden besv\u00e6r konstruere en database og forbinde den til vores applikation. Det eneste du skal g\u00f8re er at klikke p\u00e5 <strong>Applikationer<\/strong> i navigationsmenuen til venstre, derefter <strong>Tilf\u00f8j tjeneste<\/strong> og v\u00e6lg <strong>Database<\/strong>.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-36.png\" alt=\"Muligheden \"Opret en database\" i MyKinsta, der viser felter til at give databasens grundl\u00e6ggende oplysninger, efterfulgt af en lilla knap \"Opret database\".\" width=\"1024\" height=\"640\"><figcaption class=\"wp-caption-text\">Tilf\u00f8jelse af en ny database i MyKinsta.<\/figcaption><\/figure>\n<p>N\u00e5r du har udfyldt alle felter, skal du klikke p\u00e5 <strong>Opret database<\/strong>. Dette vil oprette en ny database, der er klar til interne og eksterne forbindelser. I vores scenarie har vi brug for en intern forbindelse til det Laravel 10-projekt, som vi har implementeret.<\/p>\n<p>For at opn\u00e5 dette skal du blot klikke p\u00e5 <strong>Tilf\u00f8j applikation<\/strong> i afsnittet <strong>Interne forbindelser<\/strong> og v\u00e6lge dit program. Du kan markere afkrydsningsfeltet <strong>Tilf\u00f8j milj\u00f8variabler<\/strong> til applikationen, og MyKinsta vil udfylde alle de <code>.env<\/code> variabler, som din applikation har brug for.<\/p>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-37.png\" alt=\"Muligheden \"Tilf\u00f8j intern forbindelse\" i MyKinsta for at forbinde en database med en applikation med n\u00f8glev\u00e6rdifelter efterfulgt af en \"Tilf\u00f8j forbindelse\"-knap.\" width=\"1024\" height=\"640\"><figcaption class=\"wp-caption-text\">Tilslutning af en database til en Laravel 10-applikation.<\/figcaption><\/figure>\n<p>Dermed er din Laravel 10-applikation implementeret og forbundet til en database.<\/p>\n<h2>S\u00e5dan bidrager du til Laravel 10<\/h2>\n<p>Selv om Laravel vedligeholdes af et kernehold, udvikles det aktivt af over <a href=\"https:\/\/github.com\/laravel\/framework\/graphs\/contributors\" target=\"_blank\" rel=\"noopener noreferrer\">3.000 frivillige bidragydere<\/a>.<\/p>\n<p>Vil du v\u00e6re en af disse bidragydere og v\u00e6re med til at forme Laravels fremtid? Hvis du har svaret ja, kan du hj\u00e6lpe udviklere over hele verden ved at tilf\u00f8je en ny funktion, rette en fejl eller endda omskrive en forvirrende del af dokumentationen.<\/p>\n<p>Hvis du vil bidrage til Laravel 10, skal du g\u00f8re f\u00f8lgende:<\/p>\n<ol>\n<li>G\u00e5 til <a href=\"https:\/\/github.com\/laravel\/framework\/pulls?page=2&#038;q=is%3Apr+is%3Amerged+10.x\" target=\"_blank\" rel=\"noopener noreferrer\">Laravels GitHub-repository<\/a> og tjek pull requests tagget med [10.x] i titlen. Dette vil give dig et klart billede af alle pull requests for Laravel 10. Hvis en af PR&#8217;erne omhandler det bidrag, du havde til hensigt at lave, s\u00e5 se, om du kan forbedre det.<\/li>\n<li>Hvis dit planlagte bidrag endnu ikke er blevet behandlet af en anden, kan du selv oprette en PR.<\/li>\n<li>Det er ikke alt, der er v\u00e6rd at tilf\u00f8je til rammekodebasen. Derfor skal du bestr\u00e6be dig p\u00e5 kun at implementere forbedringer, der vil v\u00e6re lette at vedligeholde i fremtiden og vil hj\u00e6lpe langt st\u00f8rstedelen af Laravel-f\u00e6llesskabet.<\/li>\n<li>S\u00f8rg for at overholde <a href=\"https:\/\/laravel.com\/docs\/master\/contributions\" target=\"_blank\" rel=\"noopener noreferrer\">Laravels retningslinjer for bidrag<\/a> for at f\u00e5 en bedre chance for at f\u00e5 dine \u00e6ndringer sammenf\u00f8jet med dit framework.<\/li>\n<\/ol>\n<p>En anden grund til at elske Laravel 10 er, at det giver dig mulighed for at vinde penge for dine bidrag med fejljagter! Vi vil se p\u00e5 disse n\u00e6ste gang.<\/p>\n<h3>Laravel 10 Bug Hunt-konkurrence<\/h3>\n<figure style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/Untitled-20.png\" alt=\"Laravel 10-logoet efterfulgt af et gr\u00f8nt tegneserieinsekt med gr\u00e5 striber.\" width=\"1024\" height=\"576\"><figcaption class=\"wp-caption-text\">Laravel 10 fejljagtkonkurrence.<\/figcaption><\/figure>\n<p>Laravel 10 har annonceret en fremragende konkurrence, hvor en tilf\u00e6ldig bidragyder har chancen for at vinde 1.000 dollars. Dette var den f\u00f8rste konkurrence af sin art i Laravels historie. Den blev designet for at opmuntre f\u00e6llesskabet til at finde og lappe skjulte fejl i Laravel 10.<\/p>\n<p>Reglerne var ligetil:<\/p>\n<ul>\n<li>Kun PR&#8217;er, der er indsendt til <code>laravel\/framework<\/code> repository&#8217;s 10.x-gren, er berettigede.<\/li>\n<li>Kun &#8220;\u00e6gte&#8221; fejlrettelser blev taget i betragtning. Nye funktioner, refaktorering og rettelser af sl\u00e5fejl blev ikke taget i betragtning.<\/li>\n<li>Hver fejlrettelse skal underst\u00f8ttes af en test.<\/li>\n<li>Accepterede fejlrettelser blev m\u00e6rket p\u00e5 GitHub, og en tilf\u00e6ldig vinder vil blive annonceret efter konkurrencens afslutning.<\/li>\n<\/ul>\n<p>Konkurrencen var slut, da den f\u00f8rste stabile version af Laravel 10 blev udgivet den 14. februar 2023.<\/p>\n<h2>Resum\u00e9<\/h2>\n<p>Indtil videre ser Laravel 10 ud til at v\u00e6re ekstremt lovende, og vi gl\u00e6der os til at d\u00e6kke alle de gaver, som det bringer til PHP-verdenen.<\/p>\n\n<p>Hvis du leder efter flere <a href=\"https:\/\/kinsta.com\/dk\/blog\/laravel-ydeevnen\/\">m\u00e5der at forbedre ydelsen af din Laravel-app<\/a> p\u00e5, kan du overveje at skifte til en premium-hostingudbyder. <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Kinstas applikationshostingl\u00f8sninger<\/a> er blandt de hurtigste, mest sikre og nemmeste at bruge i branchen, og de er specielt designet med udviklere i tankerne og tilbyder str\u00f8mlining af produktionen og 24\/7 ekspertsupport fra vores egne erfarne udviklere.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Efter over et \u00e5rti siden introduktionen af det vildt popul\u00e6re Laravel framework, har du s\u00e5 nogensinde t\u00e6nkt: &#8220;Hvad mere kan Laravel tilbyde PHP-udviklere?&#8221; I betragtning af &#8230;<\/p>\n","protected":false},"author":266,"featured_media":48893,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[712],"class_list":["post-48892","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","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>Hvad er nyt i Laravel 10: En dybdeg\u00e5ende gennemgang<\/title>\n<meta name=\"description\" content=\"I denne artikel tager vi dig med p\u00e5 en rejse gennem Laravel 10s nye funktioner, rettelser og nyligt for\u00e6ldede metoder og pakker.\" \/>\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-10\/\" \/>\n<meta property=\"og:locale\" content=\"da_DK\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hvad er nyt i Laravel 10: En dybdeg\u00e5ende gennemgang af de seneste opdateringer og funktioner\" \/>\n<meta property=\"og:description\" content=\"I denne artikel tager vi dig med p\u00e5 en rejse gennem Laravel 10s nye funktioner, rettelser og nyligt for\u00e6ldede metoder og pakker.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/\" \/>\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=\"2023-02-21T12:42:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-24T09:29:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"3042\" \/>\n\t<meta property=\"og:image:height\" content=\"1521\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mostafa Said\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"I denne artikel tager vi dig med p\u00e5 en rejse gennem Laravel 10s nye funktioner, rettelser og nyligt for\u00e6ldede metoder og pakker.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png\" \/>\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=\"Mostafa Said\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimeret l\u00e6setid\" \/>\n\t<meta name=\"twitter:data2\" content=\"28 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-10\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/\"},\"author\":{\"name\":\"Mostafa Said\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996\"},\"headline\":\"Hvad er nyt i Laravel 10: En dybdeg\u00e5ende gennemgang af de seneste opdateringer og funktioner\",\"datePublished\":\"2023-02-21T12:42:34+00:00\",\"dateModified\":\"2023-08-24T09:29:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/\"},\"wordCount\":5282,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png\",\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/\",\"url\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/\",\"name\":\"Hvad er nyt i Laravel 10: En dybdeg\u00e5ende gennemgang\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png\",\"datePublished\":\"2023-02-21T12:42:34+00:00\",\"dateModified\":\"2023-08-24T09:29:04+00:00\",\"description\":\"I denne artikel tager vi dig med p\u00e5 en rejse gennem Laravel 10s nye funktioner, rettelser og nyligt for\u00e6ldede metoder og pakker.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#breadcrumb\"},\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png\",\"contentUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png\",\"width\":3042,\"height\":1521},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#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\":\"Hvad er nyt i Laravel 10: En dybdeg\u00e5ende gennemgang af de seneste opdateringer og funktioner\"}]},{\"@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\/e96baff25a5ee7e63a525f9557f79996\",\"name\":\"Mostafa Said\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g\",\"caption\":\"Mostafa Said\"},\"description\":\"I\u2019m Mostafa, a full-stack developer with a knack for all things Laravel, Inertia, and JavaScript frameworks. When I'm not coding, you can find me sharing my knowledge through tutorials, diving into hackathons (and winning a few), and spreading the love for tech by teaching what I've learned.\",\"url\":\"https:\/\/kinsta.com\/dk\/blog\/author\/mostafasaid\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Hvad er nyt i Laravel 10: En dybdeg\u00e5ende gennemgang","description":"I denne artikel tager vi dig med p\u00e5 en rejse gennem Laravel 10s nye funktioner, rettelser og nyligt for\u00e6ldede metoder og pakker.","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-10\/","og_locale":"da_DK","og_type":"article","og_title":"Hvad er nyt i Laravel 10: En dybdeg\u00e5ende gennemgang af de seneste opdateringer og funktioner","og_description":"I denne artikel tager vi dig med p\u00e5 en rejse gennem Laravel 10s nye funktioner, rettelser og nyligt for\u00e6ldede metoder og pakker.","og_url":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/","article_published_time":"2023-02-21T12:42:34+00:00","article_modified_time":"2023-08-24T09:29:04+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png","type":"image\/png"}],"author":"Mostafa Said","twitter_card":"summary_large_image","twitter_description":"I denne artikel tager vi dig med p\u00e5 en rejse gennem Laravel 10s nye funktioner, rettelser og nyligt for\u00e6ldede metoder og pakker.","twitter_image":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png","twitter_creator":"@kinsta_dk","twitter_site":"@kinsta_dk","twitter_misc":{"Skrevet af":"Mostafa Said","Estimeret l\u00e6setid":"28 minutter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/"},"author":{"name":"Mostafa Said","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996"},"headline":"Hvad er nyt i Laravel 10: En dybdeg\u00e5ende gennemgang af de seneste opdateringer og funktioner","datePublished":"2023-02-21T12:42:34+00:00","dateModified":"2023-08-24T09:29:04+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/"},"wordCount":5282,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/dk\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png","inLanguage":"da-DK","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/","url":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/","name":"Hvad er nyt i Laravel 10: En dybdeg\u00e5ende gennemgang","isPartOf":{"@id":"https:\/\/kinsta.com\/dk\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png","datePublished":"2023-02-21T12:42:34+00:00","dateModified":"2023-08-24T09:29:04+00:00","description":"I denne artikel tager vi dig med p\u00e5 en rejse gennem Laravel 10s nye funktioner, rettelser og nyligt for\u00e6ldede metoder og pakker.","breadcrumb":{"@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#breadcrumb"},"inLanguage":"da-DK","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/dk\/blog\/laravel-10\/"]}]},{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#primaryimage","url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png","contentUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/02\/laravel-10-1.png","width":3042,"height":1521},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/dk\/blog\/laravel-10\/#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":"Hvad er nyt i Laravel 10: En dybdeg\u00e5ende gennemgang af de seneste opdateringer og funktioner"}]},{"@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\/e96baff25a5ee7e63a525f9557f79996","name":"Mostafa Said","image":{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g","caption":"Mostafa Said"},"description":"I\u2019m Mostafa, a full-stack developer with a knack for all things Laravel, Inertia, and JavaScript frameworks. When I'm not coding, you can find me sharing my knowledge through tutorials, diving into hackathons (and winning a few), and spreading the love for tech by teaching what I've learned.","url":"https:\/\/kinsta.com\/dk\/blog\/author\/mostafasaid\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/48892","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\/266"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/comments?post=48892"}],"version-history":[{"count":16,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/48892\/revisions"}],"predecessor-version":[{"id":49308,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/48892\/revisions\/49308"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/48892\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/48892\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/48892\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/48892\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/48892\/translations\/de"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/48892\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/48892\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/48892\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/48892\/translations\/dk"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/48892\/translations\/jp"},{"href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/48892\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/media\/48893"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/media?parent=48892"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/tags?post=48892"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/topic?post=48892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}