Efter over et årti siden introduktionen af det vildt populære Laravel framework, har du så nogensinde tænkt: “Hvad mere kan Laravel tilbyde PHP-udviklere?”

I betragtning af hvor meget det allerede har forenklet PHP-udvikling for både nybegyndere og professionelle udviklere, kan nogle måske endda hævde, at det har forkælet udviklere til at tro, at PHP er det nemmeste programmeringssprog derude.

Så har Laravel stadig flere overraskelser i vente for Laravel-udviklere? Eller er alle muligheder for at støtte PHP-udviklere udtømt?

Vi ved i hvert fald, at Laravel 10 har meget at byde på. Det er det, vi vil afdække i denne artikel, når vi tager dig med på en rejse gennem Laravel 10’s nye funktioner, rettelser og nyligt forældede metoder og pakker.

Laravel-udgivelsesplan

Laravel-kerneteamet plejede at frigive to større versioner årligt (en hver sjette måned).

Udgivelsescyklussen blev dog ændret, da Taylor Otwell, skaberen af Laravel, annoncerede, at der nu ville blive udgivet en enkelt større version hvert år. Dette gjorde det muligt for kerneholdet og fællesskabet at bruge mere tid og kræfter på en specifik version af rammen og indføre nye kraftfulde funktioner uden at foretage brud på ændringer.

Laravel 10 var planlagt til at blive udgivet den 7. februar 2023, efter udgivelsen af Laravel 9 den 8. februar 2022. Holdet havde dog brug for mere tid til at færdiggøre deres kunstværk, og Laravel 10 blev i sidste ende offentliggjort den 14. februar 2023.

Laravel 11 forventes nu at blive udgivet i første kvartal af februar 2024.

Derudover tilbydes der ifølge supportpolitikken fejlrettelser i 18 måneder og sikkerhedsopdateringer i to år for alle Laravel-versioner.

Følgende er den forventede tidsplan for fejlrettelser og sikkerhedsopdateringer:

  • Laravel 9 vil fortsat få fejlrettelser indtil den 8. august 2023 og sikkerhedsrettelser indtil den 6. februar 2024.
  • Laravel 10 vil få fejlrettelser indtil den 6. august 2024 og sikkerhedsrettelser indtil den 4. februar 2025.
  • Laravel 11 forventes at få fejlrettelser indtil den 5. august 2025 og sikkerhedsrettelser indtil den 3. februar 2026.

Skal du opgradere til Laravel 10?

Det er vigtigt at huske, at vi ikke altid behøver at opgradere vores applikations Laravel-version til den nyeste version, så snart en ny version bliver udgivet.

Laravel er et open source framework, hvilket indebærer, at hver gang vi installerer en ny Laravel-instans på vores maskine, ejer vi frameworkets kodebase. Det betyder, at selv hvis den rammeversion, som vores app bruger, ikke længere understøttes, vil appen stadig fungere; vi skal bare selv vedligeholde den.

Som følge heraf foreslås det generelt, at stabilitet af applikationen prioriteres højere end opgraderinger af framework’en.

Kort sagt bør du overveje at opgradere til Laravel 10, når:

  • Applikationen er stabil med den nuværende version og fungerer uden problemer.
  • Den nye version tilføjer enten en funktion, som din applikation har brug for, eller løser et problem, som din applikation oplever.
  • Applikationen vil være godt testet, før opgraderingsændringerne bliver skubbet ind i produktionen.

Laravel 10 varme opdateringer

Laravel 10-logoet med ordet "Laravel" i lys orange og "10" i gråt.
Laravel 10.

Kinsta er en stor fan af Laravel. Derfor har vi samlet højdepunkterne i Laravel 10 i en enkelt artikel, så 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ærker og genbesøger den fra tid til anden.

Nye funktioner og opdateringer i Laravel 10

Der er ingen tvivl om, at den mest spændende del af enhver ny version er tilføjelsen af nye funktioner. Så lad os uden videre begynde med at tage et kig på de nye funktioner og opdateringer i Laravel 10.

1. PHP 8.1: I hjertet af Laravel 10

PHP 8.1 er den mindst krævede PHP-version i Laravel 10. Nogle af PHP 8.1-funktionerne, såsom readonly properties og array_is_list, anvendes i Laravel 10.

2. Understøttelse af PHP 8.2

PHP 8.2 blev frigivet den 8. december 2022, kun to måneder før Laravel 10-udgivelsesdatoen. Alligevel bør dette ikke afholde dig fra at udnytte PHP 8.2-funktioner, da Laravel 10 uden at gøre noget ekstra er klar til PHP 8.2.

Faktisk understøtter hele Laravel-økosystemet, herunder Forge, Vapor og Envoyer, PHP 8.2, og du kan endda bruge PHP 8.2 med Laravel 9. Hvor fedt er det ikk’ lige!

3. Opgradering af officielle Laravel-pakker

Ikke alene er rammen professionelt vedligeholdt og opdateres regelmæssigt, men det samme gør alle de officielle pakker og økosystemet.

Nedenstående er en liste over de seneste officielle Laravel-pakker, der er blevet opdateret til understøttelse af Laravel 10:

  1. Breeze
  2. Cashier Stripe
  3. Dusk
  4. Horizon
  5. Installatør
  6. Jetstream
  7. Passport
  8. Pint
  9. Sail
  10. Scout
  11. Valet

Inertiajs 1.0.1 er en anden godbid for Rails-, Vue-, React- og Svelte-fans og understøtter også Laravel 10.

4. Opgradering af Predis-versionen

Predis er en robust Redis-klient til PHP, der kan hjælpe dig med at få mest muligt ud af caching for at give en fantastisk brugeroplevelse. Laravel understøttede tidligere både version 1 og 2, men fra og med Laravel 10 understøtter rammen ikke længere Predis 1.

Selv om Laravel-dokumentationen nævner Predis som pakken til interaktion med Redis, kan du også bruge den officielle PHP-udvidelse. Denne udvidelse indeholder en API til kommunikation med Redis-servere.

5. Native typedeklarationer

Laravel plejede at bruge DocBlocks i sin skeletkode for at tydeliggøre, hvad et stykke kode gør, og hvilke typer parametre eller svar man kan forvente. Men takket være native typedeklarationer i Laravel 10 vil dette ændre sig.

Den bedste måde at forklare denne ændring på er med et simpelt eksempel. I stedet for at en funktion ser således ud:

/**
* Determine whether the user can create models.
*
* @param {{ namespacedUserModel }} $user
* @return IlluminateAuthAccessResponse|bool
*/

public function create({{ user }} $user)
{
  //
}

… vil den se således ud:

/**
* Determine whether the user can create models.
*/

public function create({{ user }} $user): bool
{
  //
}

Denne ændring er udelukkende til gavn for udvikleren, da IDE’er vil kende formen på den forventede parameter og det forventede svar. Det vil give en bedre tydelighed af typen, når det ikke er muligt gennem PHP’s native typer. Derfor vil det hjælpe kodeeditorer til at yde bedre med auto-complete-funktioner.

6. Alle valideringsregler kan aktiveres som standard

Hvis du skulle lave en invokable valideringsregel i Laravel 9, skal du tilføje et --invokable -flag efter Artisan-kommandoen. Dette er ikke længere nødvendigt, da alle Laravel 10-regler er invokable som standard. Så du kan køre følgende kommando for at oprette en ny invokable regel i Laravel 10:

php artisan make:rule CustomRule

7. Native Column Modification Support

I et forsøg på at fjerne behovet for DBAL (doctrine/dbal) pakken, når man bruger change() til at ændre kolonner, blev der indført en ny funktion i Laravel 10, som gør det muligt for udviklere at bruge change() metoden og ændre kolonner med MySQL, PostgreSQL og SQL Server uden behov for ekstra pakker. Dette er en betydelig og risikabel brudændring, men vi mener, at det er det værd, da det fjerner afhængigheden af en ekstra pakke.

For at få en bedre forståelse af den nye funktion kan du se eksemplet nedenfor:

$table->integer('user_balance')->unsigned()->default(0)->comment('balance'); // `user_balance` is an integer, unsigned, defaults to '0', and column comment is 'balance'

Nu antager vi, at vi har en kolonne for user_balance, og at vi ønsker at ændre dens type. Fra og med Laravel 10 kan vi simpelthen gøre dette:

$table->bigInteger('user_balance')->change(); // This will change `user_balance` to bigInteger instead of just integer

Ovenstående kode vil ændre kolonnens type med succes, men vil også fjerne attributterne UNSIGNED, DEFAULT og COMMENT. Derfor er det vigtigt at huske at tilføje alle attributterne, når du ændrer typen af en kolonne:

$table->bigInteger('user_balance')->unsigned()->default(0)->comment('balance')->change();

I tilfælde hvor du har flere databaseforbindelser og allerede har installeret DBAL, anbefales det at kalde Schema::useNativeSchemaOperationsIfPossible() -metoden inden for boot-metoden i AppProvidersAppServiceProvider for at kunne bruge native skemaoperationer og for at kunne bruge native operationer, før du stoler på pakken (SQLite understøtter f.eks. endnu ikke dette):

use IlluminateSupportFacadesSchema;
class AppServiceProvider extends ServiceProvider
{
  public function boot()
  {
    Schema::useNativeSchemaOperationsIfPossible();
  }
}

8. Column Type Native Retrieval

En anden bemærkelsesværdig funktion i Laravel 10 er muligheden for at bruge Schema::getColumnType -metoden uden at skulle stole på doctrine/dbal -pakken. Vi bruger i øjeblikket Schema::getColumnType med DBAL til at få kolonnetypen. DBAL mapper hver native kolonnetype til dens DBAL-typeækvivalent, og den understøtter ikke mange af de kolonnetyper, der bruges af Laravel på tværs af forskellige databaser.

I Laravel 10 vil den nye Schema::getColumnType -metode derimod returnere den faktiske kolonnetype i stedet for dens DBAL-ækvivalent. Det giver dig også mulighed for at skrive integrationstest for den nye native funktion til ændring af kolonner. Du kan bruge denne funktion til at få enten navnet på datatypen eller hele typedefinitionen for den angivne kolonne:

Schema::getColumnType('products', 'price'); // decimal

9. Hurtigere Hashing-algoritme

xxHash er en Hash-algoritme, der er utrolig hurtig. Den har stor tilfældighed og spredning af output samt unikhed for at reducere kollisioner. Da PHP 8.1 giver understøttelse for xxh128, og da Laravel 10 kører på PHP 8.1, er det ideelt at have en så pålidelig hash-algoritme i Laravel 10.

Det er værd at nævne, at Taylor under sin gennemgang af denne ændring fremhævede, at nogle tredjepartspakker kan være afhængige af, at filnavnene er i det nøjagtige format som SHA-1-hash, som er den algoritme, som Laravel brugte til hashing. Hvis du planlægger en opgradering til Laravel 10, vil det derfor være klogt at dobbelttjekke dette i alle tredjepartspakker, som du bruger i din app.

10. whereExists() Metodeunderstøttelse for Eloquent Builder

I øjeblikket kræver brugen af whereExists(), at den indlejrede forespørgsel konfigureres ved hjælp af en lukning. Heldigvis er det med Laravel 10 nu muligt at inkludere en Eloquent Builder som en nested query. Det gør det muligt at bruge brugerdefinerede buildermetoder, model scopes osv.

For eksempel gør vi normalt dette, hvis vi ønsker at bruge whereExists():

Order::whereExists(function ($query) {
  $query->from('products')->whereColumn('products.order_id', 'orders.id');
});

Med Laravel 10 kan vi bare gøre dette i stedet:

Order::whereExists(
  Product::whereColumn('products.order_id', 'orders.id')
);

11. Eager Loading Optimering

En af de interessante nye funktioner i Laravel 10 er eager loading-optimering, når der ikke er nogen nøgler, der skal indlæses. Denne ændring er mere en rettelse end en funktion, da den tackler et aktuelt problem, hvor eager loading-relationer medfører, at der udføres et stort antal umulige forespørgsler.

I øjeblikket vil Laravel stadig udføre en forespørgsel svarende til denne, når der eager-loades relationer, som ikke har nogen nøgler, der skal indlæses:

select * from `table_name` where 0 = 1

Den nye Laravel 10-opdatering kontrollerer imidlertid, om der overhovedet er nogen nøgler til rådighed, og hvis der ikke er nogen, leverer den en tom samling, hvilket eliminerer behovet for de unødvendige databaseforespørgsler.

12. $path Valgfrit for filsystemmetoder

I Laravel 10 er parameteren $path valgfri for nedenstående metoder:

  • FilesystemAdapter#putFile
  • FilesystemAdapter#putFileAs
  • UploadedFile#store
  • UploadedFile#storeAs
  • UploadedFile#storePublicly
  • UploadedFile#storePubliclyAs

Så i stedet for at gøre dette for at gemme en uploadet fil på Amazon S3:

Storage::disk('s3')->putFile(‘post/images', $uploadedFile);

…kan vi gøre dette:

Storage::disk(Disk::PostImages)->putFile($uploadedFile)

13. Databaseudtryk og grammatikspecifik formatering

Blot fire dage før udgivelsen af Laravel 10 besluttede Laravel-kerneteamet at sammenlægge en genial funktion, der løser en stor udfordring, når man arbejder med flere databaser.

I tidligere versioner, hvis vi arbejdede med PostgreSQL og MySQL og ønskede at returnere den første værdi i en liste som et alias, skulle vi skrive rå databasekode og gøre følgende:

DB::table(‘visitors')
->when(isPostgreSQL(), fn ($query) => $query->select(DB::raw('coalesce(NULL, "user", "guest") AS "First Visitor"')))
->when(isMySQL(), fn ($query) => $query->select(DB::raw('coalesce(NULL, `user`, `guest`) AS `First Visitor`')))

I ovenstående kode bruger vi funktionenCOALESCE() til at returnere den første ikke-nul-værdi som et alias ved navn first visitor. Så hver gang vi skal udføre en operation som denne, skal vi skrive rå databasekode igen.

Den nye funktion gør det muligt for os at oprette genanvendelige udtryksklasser, der kun én gang implementerer de rå udtryk og udsagn, vi har brug for til vores forespørgsler. Dette vil fjerne behovet for at skrive rå databasekode, når vi ønsker at bruge flere databasefunktioner.

Lad os gå tilbage til ovenstående eksempel og følge den nye Laravel 10-tilgang for at opnå det samme resultat, men uden at bruge rå databasekode-syntaks.

Først skal vi oprette to klasser – en til aliasing og en til brug af COALESCE() -funktionen:

class Alias implements Expression
{
  public function __construct(
    public readonly Expression|string $expression,
    public readonly string $name,
  ) { }
  public function getValue(Grammar $grammar): string
  {
    return match ($grammar->isExpression($this->expression)) {
      true => "{$grammar->getValue($this->expression)} as {$grammar->wrap($this->name)}",
      false => $grammar->wrap("{$this->name} as {$this->name}"),
    };
  }
}
class Coalesce implements Expression
{
  public function __construct(
    public readonly array $expressions,
  ) { }
  public function getValue(Grammar $grammar): string
  {
    $expressions = array_map(function ($expression) use($grammar): string {
      return match ($grammar->isExpression($expression)) {
        true => $grammar->getValue($expression),
        false => $grammar->wrap($expression),
      };
    }, $this->expressions);
    $expressions = implode(', ', $expressions);
    return "coalesce({$expressions})";
  }
}

Derefter kan vi gøre dette for at opnå det ønskede resultat for både MySQL og PostgreSQL:

DB::table('visitors') ->select(new Alias(new Coalesce([NULL, 'user', 'guest']), 'First Visitor'));

Du kan synes, at det er for meget arbejde at skrive, men det er helt sikkert det værd, fordi du kun behøver at skrive det én gang, og det sparer dig for besværet med at ændre syntaks, når du har med flere databaser at gøre.

Desuden vil denne ændring ifølge pull request’s skaber, Tobias Petry, åbne døren for mange muligheder for pakker, der kan levere de mest almindelige rå udtryksklasser til dig. Han erklærede endda, at han vil stille den til rådighed for fællesskabet i en dedikeret pakke efter Laravel 10’s udgivelse.

14. SQL Server Update To Use FETCH and OFFSET for Queries That Do Not Include an orderBy

Når vi bruger orderBy i en forespørgsel som denne:

$builder->select('*')->from('users')->skip(11)->take(10)->orderBy('email', 'desc');

Laravel producerer derefter en SQL-angivelse, der bruger FETCH og OFFSET:

select * from [users] order by [email] desc offset 11 rows fetch next 10 rows only

Men i tidligere versioner af Laravel, hvis vi dropper orderBy fra forespørgslen, falder den tilbage til den gamle metode til at forskyde resultaterne:

$builder->select('*')->from('users')->skip(11)->take(10);
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

Men nu i Laravel 10 vil denne nye opdatering gøre det muligt for din Laravel 10-applikation at bruge FETCH og OFFSET, selv når orderBy ikke er til stede:

select * from [users] order by (SELECT 0) offset 10 rows fetch next 10 rows only

Denne opdatering forbedrer hastigheden med 33 % og kræver færre eksekveringstrin.

15. Understøttelse af PHPUnit 10

Laravel 10 understøtter PHPUnit 10. Det er et framework til enhedstest for PHP, og version 10 blev udgivet den 3. februar 2023. Laravel 10 vil stadig have understøttelse for PHPUnit 9 og 8.

16. Sikkerhedsforbedringer for Timebox Class

Laravel 10 indeholder sikkerhedsforbedringer for klassen Timebox, som har til formål at beskytte applikationen mod tidløse timingangreb. Klassen Timebox er implementeret inde i metoden hasValidCredentials.

Klassen Timebox har nu understøttelse til at håndtere undtagelser, der kastes under en Timebox’ callback-eksekvering.

17. dispatch() Metodeadfærd er den samme på tværs af Laravel 10

dispatch() -metoden inden for DispatchesJobs -trækket kontrollerer nu for unikke job på samme måde som den globale dispatch() -hjælpefunktion. Dette gør, at dispatch() -metoderne anvender de samme funktionaliteter på tværs af Laravel 10.

18. Laravel Pennant

Hvis du nogensinde har arbejdet på en webapplikation, der konstant opdateres med nye funktioner, forstår du, hvor afgørende funktionsflag er. Ikke desto mindre ville det kræve en betydelig mængde arbejde at bevare feature flags for at gøre det rigtigt, men bare rolig, Laravel har dækket dig med den nye førstepartspakke Laravel Pennant.

Laravel Pennant giver en brugervenlig løsning til vedligeholdelse af funktionsflag. Den leveres endda med en in-memory array-driver og en database.

Du kan nemt definere en ny funktion:

use LaravelPennantFeature;
use IlluminateSupportLottery;
Feature::define('new-color-button', function () {
return Lottery::odds(1, 10);
});

Så kan du kontrollere, om brugeren har adgang til denne funktion eller ej:

use LaravelPennantFeature;
if (Feature::active('new-color-button')) {
  // ...
}

Det ser endda pænere ud i Laravel Blade:

@feature('new-color-button')
// Kinsta Rules!!
@endfeature

19. Laravel Process Interaction

De nye procesinteraktioner i Laravel 10 gør det nemt at teste og køre CLI-processer. Den tilbyder et simpelt API for at lette byrden ved testning. Lad os tage eksemplet fra den oprindelige PR for funktionen af Taylor:

use IlluminateSupportFacadesProcess;
$result = Process::run('ls -la');
$result->successful();
$result->failed();
$result->exitCode();
$result->output();
$result->errorOutput();
$result->throw();
$result->throwIf(condition);

Du har sikkert bemærket, hvor enkel og ren ovenstående kode er. Hvis vi går videre til opbygningsprocesser, bliver det kun bedre:

$result = Process::timeout(60)->path(base_path())->env([...])->run('ls -la');
$result = Process::forever()->run('ls -la');

Hvis du vil bruge denne nye funktion i test, kan du oprette en ny og falsk proces som denne:

Process::fake([
  'ls *' => Process::result('Hello From Kinsta'),
]);

Derefter kan du køre den falske proces og bruge de nyligt tilgængelige assertions:

$result = Process::run('ls -la');
Process::assertRan(function ($process, $result) {
  return $process->command == 'ls -la';
});
Process::assertRanTimes(function ($process, $result) {
  return $process->command == 'ls -la';
}, times: 1);
Process::assertNotRan(function ($process, $result) {
  return $process->command == 'cat foo';
});

20. Pest Scaffolding

Pest test scaffolding er nu aktiveret som standard, når du opretter nye Laravel-projekter. For at aktivere denne funktion skal du bruge flaget --pest, når du opretter en ny app med Laravel-installationsprogrammet:

laravel new example-kinsta-app --pest

21. String Password Hjælpefunktion

Laravel 10 kan oprette en tilfældig og sikker adgangskode med en given længde:

$password = Str::password(12);

Deprecated Metoder og pakker i Laravel 10

Dernæst vil vi se på de pakker og metoder, der blev udgået med udgivelsen af Laravel 10.

Laravel 10 siger farvel til PHP 8.0

Laravel framework dropper understøttelsen af PHP 8.0 i Laravel 10. Derfor skal du, hvis du planlægger at opgradere din app til Laravel 10, først opdatere PHP-versionen til PHP 8.1 eller PHP 8.2.

Fjernelse af forældede metoder

Laravel-dokumentationen er opdateret med alle ændringer og vigtige deprecations. Hvis du skal migrere et nuværende projekt til Laravel 10, skal al kode, der bruger en deprecated metode, omskrives i en ny metode for at opnå samme resultat.

Her er en liste over nogle af deprecations:

  • Route::home -metoden (deprecated i Laravel 9)
  • Funktioner og metoder omkring dispatchNow, deprecated for at tilskynde udviklere til at bruge dispatchSync, den eneste understøttede metode til øjeblikkelig afsendelse
  • Metoden getBaseQuery, som har en toBase ækvivalent
  • Klassen MaintenanceModeException
  • Den MocksApplicationServices egenskab
  • Den falske mail-metode Mail::failures
  • $dates -egenskaben (brug $casts i stedet)
  • Metoden assertTimesSent()
  • Understøttelse af Predis 1 og DBAL 2
  • Alle relaterede deprecations i doctrine/dbal, siden Laravel droppede understøttelse af version 2

Sådan installeres Laravel 10

Laravel-kerneteamet sørgede for, at alle udviklere nemt kunne få adgang til rammen på forskellige miljøer. Derfor er der forskellige måder at komme i gang med Laravel 10 på din maskine på, og du kan helt frit vælge den metode, der fungerer bedst for dig.

Installer Laravel 10 på MacOS

Du kan nemt komme i gang med Laravel 10 på MacOS ved at bruge Docker og Laravel Sail. Du kan køre følgende terminalkommando fra den mappe, hvor du vil have applikationen installeret, og husk, at kun alfanumeriske tegn, bindestreger og understregninger er tilladt i app-navnet:

curl -s "https://laravel.build/example-kinsta-app" | bash

Når installationsprocessen er afsluttet, skal du gå til projektmappen og bruge Sail til at køre dit nye projekt ved at trykke på følgende kommando i terminalen:

./vendor/bin/sail up

Sail vil bruge sin indbyggede løsning til at køre dit Laravel-projekt ved hjælp af Docker, og når det er færdigt, vil din applikation være klar på http://localhost.

Installer Laravel 10 på Windows 10 og 11

Docker Desktop kan bruges til hurtigt at installere Laravel 10 på Windows. Uanset om du bruger Windows 10 eller 11, skal du dog først aktivere en af de to følgende muligheder på din maskine:

  • Windows Subsystem for Linux 2 (WSL2) er en Windows-operativsystemfunktion, der gør det muligt at køre et Linux-filsystem og Linux-kommandolinjeværktøjer direkte på Windows.
  • Hyper-V Backend-funktion giver dig mulighed for at oprette og betjene en softwareversion af en computer, der er kendt som en virtuel maskine.

Så snart du har opfyldt alle Docker-kravene, kan du køre følgende kommando i din terminal:

curl -s https://laravel.build/example-kinsta-app | bash

Brug derefter Sail til at køre din applikation på http://localhost ved at trykke på følgende kommando fra rodmappen i dit nyligt installerede Laravel 10-projekt:

./vendor/bin/sail up

På en sidebemærkning, mange udviklere foretrækker 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 Ubuntus sikkerhed, ydeevne og spilkompatibilitet. Ubuntu er en Linux-distribution eller en version af Linux, der er kendt for sin brugervenlighed.

Det anbefales, at du bruger Visual Studio Code og installerer den officielle Microsoft WSL-udvidelse for at kunne åbne enhver mappe i Windows Subsystem for Linux og drage fordel af hele vscodes funktionssæt. Derudover er Remote Development extension en anden mulighed, som der henvises til i Laravel-dokumentationen.

Installer Laravel 10 med Composer

Uanset om du bruger macOS eller Windows, kan Composer få dig op at køre med Laravel 10 på ingen tid.

Du skal først sikre dig, at du har PHP ≤ 8.1, node, npm og Composer installeret på din maskine.

Når du har gjort det, kan du installere Laravel Installer globalt og bruge det til at installere din nye Laravel 10-applikation:

composer global require laravel/installer
laravel new example-kinsta-app

Eller du kan oprette en ny Laravel 10-app direkte ved kun at bruge Composer:

composer create-project laravel/laravel example-kinsta-app

Sådan installeres Laravel 11

Vi er stadig et år fra udgivelsen af Laravel 11. Laravel 11 er dog i øjeblikket tilgængelig, så du kan teste dens funktioner. Ikke alene er den tilgængelig, men den indeholder også nogle sammenlagte PR’er på GitHub, såsom at droppe PHP 8.1-understøttelsen.

Flaget --dev i Laravel Installer installerer mastergrenen fra laravel/laravel -repositoriet, og nu hvor Laravel 10 er ude, vil Laravel 11 være tilgængelig på mastergrenen. Hvis du bruger Laravel Installer, skal du blot køre denne kommando i din terminal:

laravel new example-kinsta-app --dev

Eller, hvis du foretrækker at bruge Composer:

composer create-project --prefer-dist laravel/laravel example-kinsta-app dev-master

For bedre at forstå Composer-kommandoen er der her en kort forklaring:

  • laravel/laravel: Pakken til Laravel-installationen
  • example-kinsta-app: Den nye mappe til dit nye projekt (kan ændres)
  • dev-master: Den næste version af Laravel (i dette tilfælde Laravel 11)

Når du har installeret Laravel 11, kan du bekræfte versionen ved at navigere til den nye mappe example-kinsta-app og køre denne Artisan-kommando:

$ php artisan --version
Laravel Framework 11.x-dev

Sådan opgraderer du et projekt til Laravel 10

Er du fristet til at opgradere til Laravel 10? Laravel core teamet arbejder hårdt på dokumentation for at give en problemfri og ligetil opgraderingsguide, samtidig med at alle mulige breaking change dækkes. Du er velkommen til at tjekke den officielle Laravel 10-opgraderingsguide.

Du bør også holde øje med Laravel Shift nu, hvor Laravel 10 er blevet frigivet. Laravel Shift tilbyder en enkel og automatiseret tilgang til at opgradere din Laravel-version.

Sådan distribueres Laravel 10-projekter

Implementering af Laravel 10 er ikke anderledes end implementering af Laravel 9-projekt.

Her er serverkravene:

  • PHP ≤ 8.1
  • Ctype PHP-udvidelse
  • cURL PHP-udvidelse
  • DOM PHP-udvidelse
  • Fileinfo PHP-udvidelse
  • Mbstring PHP-udvidelse
  • OpenSSL PHP-udvidelse
  • PCRE PHP-udvidelse
  • PDO PHP-udvidelse
  • Tokenizer PHP-udvidelse
  • XML PHP-udvidelse
  • Filter PHP-udvidelse
  • Hash PHP-udvidelse
  • Session PHP-udvidelse

Du kan implementere og hoste dit Laravel 10-projekt på Kinsta i løbet af få minutter, da Laravel er en af en lang liste af understøttede frameworks til hostede apps.

Udrulning af Laravel 10 på Kinsta: Trin-for-trin-guide

Der er flere fordele ved at hoste og distribuere dine Laravel applikationer på Kinsta, herunder at du ikke behøver at bekymre dig om konfigurationen af distributionen.

Kinsta tilbyder et brugervenligt, men kraftfuldt værktøj til at implementere applikationer, oprette forbindelse til databaser og overvåge live-ydelse. Dette værktøj er kendt som MyKinsta, og i dette afsnit vil vi gennemgå trinene for at implementere en Laravel 10-applikation ved hjælp af det.

1. Forbered din applikation

Et eksempel på en Laravel 10-applikationsside, der viser "Laravel Kinsta" øverst efterfulgt af et gitter med fire indholdsbokse med etiketterne "Kinsta", "Laracasts", "Laravel News" og "Vibrand Ecosystem".
Hjemmesiden for en Laravel 10-applikation, der er implementeret på Kinsta.

Hvis vi antager, at du har en Laravel 10-applikation lokalt, skal vi sikre os, at den har et GitHub-repositorium tilgængeligt. Vi vil bruge dette repository til at implementere applikationen senere.

Du kan inkludere en .htaccess-fil i rodmappen for din applikation, der indeholder følgende:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

For Laravel omdirigerer dette alle anmodninger til public/index.php. Hvis det er nødvendigt, kan du dog opdatere denne kommando, mens du tilføjer din applikation (trinet Opsætningaf dine processer) eller efter implementeringen på applikationens side Processer. Du kan bruge:

  • heroku-php-apache2 /public
  • php artisan serve --host 0.0.0.0 --port 8080

2. Log ind på MyKinsta

En loginformular til MyKinsta, der viser "MyKinsta Login" øverst efterfulgt af "E-mail og "Password" felter, med en lilla "Login" knap nederst.
MyKinsta-loginsiden.

Gå til MyKinsta-loginsiden, og indtast din e-mailadresse og adgangskode. Hvis du endnu ikke har en konto, kan du registrere en ny konto og få 20 USD rabat på din første måned med et abonnement på et hvilket som helst prisabonnement.

3. Godkend Kinsta på GitHub

Når du logger ind, vil du bemærke, at dashboardet har muligheder for at oprette et WordPress-websted, oprette en applikation eller oprette en database. Vi vil trykke på knappen Connect GitHub for at integrere med GitHub.

En del af MyKinsta-dashboardet, der viser tre rektangulære fliser: "WordPress-websted" med en "Opret et websted"-handlingsknap; "Applikation" med en "Connect GitHub" handlingsknap; og "Database" med en "Opret database"-handlingsknap.
MyKinsta-dashboardet.

Derefter skal du klikke på knappen Continue with GitHub. Hvis du ikke allerede er logget ind på GitHub, får du vist muligheden for at logge ind. Derefter kan du give Kinsta GitHub-applikationen tilladelse til at få adgang til din GitHub-konto ved at vælge Authorize Kinsta.

Til sidst omdirigerer GitHub din browser til MyKinsta for at fortsætte med at konfigurere applikationen.

Et modalt vindue, der siger "GitHub Integration: Forbind Kinsta til dit Gitub-navneområde her for at importere dine eksisterende repositories" med en hvid "Annuller"-knap og en lilla "Fortsæt med GitHub"-knap.
Tilslutning af MyKinsta til GitHub.

Når du er forbundet til GitHub, vises popup-vinduet Tilføj applikation/modalmen, som har en dropdown-menu, hvor du kan vælge et GitHub-repositorium. Klik på feltet GitHub-repository, og vælg Edit GitHub-permissions i rullemenuen.

Formularen "Tilføj ansøgning" i MyKinsta fokuserede på underafsnittet "Ansøgningsdetaljer" med teksten "Vælg gren" efterfulgt af to felter: "GitHub-lager" og "Standardgren".
Tilføjelse af en applikation til MyKinsta.

Dette åbner en ny fane i din browser til GitHub-websiden, hvor du kan vælge, hvilke data Kinsta skal kunne få adgang til. I stedet for at aktivere adgang til alle repositorier kan du overveje kun at vælge det/de repositorier, som Kinsta skal bruge.

Klik på Kun valgte repositorier, og vælg det repositorium, du ønsker at implementere.

En "Installer Kinsta"-prompt, der viser muligheder for at tillade adgang til "Alle lagre" eller "Vælg kun lagre" efterfulgt af en grøn "Installer" knap.
Giv Kinsta adgang til GitHub.

Klik derefter på Installer, og du er klar!

Når du vender tilbage til MyKinsta og klikker på GitHub-repository-feltet, skal det autoriserede repository være synligt. Derudover kan du markere afkrydsningsfeltet Automatic deployment on commit for at aktivere MyKinsta til automatisk at udrulle din applikation, så snart du foretager ændringer i GitHub-repositoriet.

"Vælg gren" applikationssektionen i MyKinsta, der viser de to felter "GitHub repository" og "Default branch" og et afkrydset afkrydsningsfelt mærket "Automatic deployment on commit".
Valg af en repository-gren til MyKinsta.

4. Tilføj grundlæggende oplysninger om applikationen

Du kan nu give applikationen et navn, der kun vil blive brugt i dashboardet, og vælge mellem 25 datacenterplaceringer, så du kan placere din applikation på den geografiske placering, der er tættest på dine brugere. Hvis du har brug for hjælp til at bestemme, hvilket datacenter der er ideelt for din applikation, kan du læse vores vejledning til valg af den rigtige datacenterplacering.

Sektionen "Grundlæggende detaljer" i MyKinsta-applikationsoprettelsesprocessen, der viser felter for "Applikationsnavn" og "Datacenterplacering".
Tilføjelse af en applikations grundlæggende oplysninger.

5. Tilføj miljøvariabler

Det følgende afsnit er til tilføjelse af miljøvariabler, og den vigtigste variabel er APP_KEY.

Hvis du ikke allerede har en nøgle i din .env-fil, kan du generere en ved hjælp af en online Laravel-nøglegenerator. Indsæt derefter APP_KEY i feltet Key 1 og indsæt den genererede app-nøgle i feltet Value 1.

Endelig skal du vælge Tilgængelig under kørselstid og Tilgængelig under byggeprocessen.

"Miljøvariabler" applikationssektionen i MyKinsta, der viser felter for "Nøgle 1" og "Værdi 1" samt afkrydsningsfelter for "Tilgængelig under kørsel" og "Tilgængelig under byggeproces".
Tilføjelse af miljøvariabler i MyKinsta.

6. Konfigurer opbygningsmiljø

Det magiske her er, at du ikke behøver at konfigurere noget som helst! Du kan fortsætte ved at klikke på knappen Fortsæt, og voilà: Du har afsluttet konfigurationen af det byggede miljø. Hvis du imidlertid ønsker at forbedre buildressourcerne for at sikre hurtigere opbygning, kan du vælge dit foretrukne valg fra feltet Build resources (opbygningsressourcer).

Feltet Bygningssti er valgfrit. Du kan lade det være tomt, og MyKinsta vil bruge rodmappen.

Applikationssektionen "Byg miljø" i MyKinsta med felter og valgbokse for "Byg ressourcer", "Opsæt containerbillede automatisk" og "Brug Dockerfile til at opsætte containerbillede".
Konfigurering af applikationens opbygningsmiljø.

7. Opsætning af processer og betalingsmetode

For afsnittet Ressourcer skal du udfylde hvert felt med følgende oplysninger:

  • Procesnavn: Det navn, der vises på listen over din applikations processer.
  • Process type: Vælg omhyggeligt, da dette ikke kan ændres, når det først er indstillet. Du kan dog tilføje og ændre yderligere processer, f.eks. et baggrundsjob, på siden Processer i applikationen efter implementeringen.
  • Startkommando: Start: Kommandoen “Start” for din proces (ikke påkrævet).
  • Pod-størrelse: Den pod-kapacitet, du forventer, at du har brug for til din proces.
  • Antal instanser: Antallet af instanser for din proces (maks. 50).

Bemærk, at du blot kan klikke på Fortsæt uden at udfylde feltet Startkommando, da Kinsta automatisk registrerer den nødvendige kommando under den første implementering.

Sektionen "Tilføj applikation: Konfigurer din proces" i MyKinsta, der viser felter for "Procesnavn", "Procestype", "Startkommando", "Podstørrelse" og "Antal forekomster".
Opsætning af applikationens processer.

I det sidste trin skal du gennemgå de månedlige forbrugsomkostninger, der er beregnet for din app, og derefter bekræfte din betalingsmetode. Når du er færdig, skal du klikke på knappen Bekræft betalingsmetode.

Skærmbilledet med betalingsoplysninger i MyKinsta, der viser "Månedlige forbrugsomkostninger" og "Betalingsmetode", hvoraf sidstnævnte viser et Visa-kort.
Bekræft betalingsoplysninger.

Og du er færdig! Kinsta vil gøre alt arbejdet i baggrunden for at betjene din applikation.

Fanen "Applikationer" i Mykinsta, der viser en implementeret applikation ved navn "eksempel-kinsta-app" sammen med dens kilde, type og sidste ændringsdato.
Indlæsning af applikationens implementeringsproces.

Derefter får du adgang til alle detaljerne i implementeringsprocessen samt den midlertidige URL-adresse for live-appen, som du senere kan erstatte med dit eget domæne.

Afsnittet "Deployment details" i MyKinsta efter succesfuld implementering af appen, der viser applikationens installationsoplysninger sammen med build- og implementeringsbekræftelsesmeddelelser.
Vellykket implementering af Laravel 10-applikation på MyKinsta.

Din Laravel 10-applikation er nu live på Kinsta, men hvad nu hvis du har brug for at foretage en ændring i produktionen? Hvad hvis vi ønsker at ændre et ankertag’s href -attribut?

Da vi har aktiveret indstillingen Automatisk implementering ved commit, vil MyKinsta registrere alle ændringer, vi foretager i den implementerede gren, og automatisk opdatere live-appen i overensstemmelse hermed.

8. Forbind Laravel 10 til MySQL-database

Nu hvor vi har implementeret vores Laravel 10-applikation, kan vi uden besvær konstruere en database og forbinde den til vores applikation. Det eneste du skal gøre er at klikke på Applikationer i navigationsmenuen til venstre, derefter Tilføj tjeneste og vælg Database.

Muligheden "Opret en database" i MyKinsta, der viser felter til at give databasens grundlæggende oplysninger, efterfulgt af en lilla knap "Opret database".
Tilføjelse af en ny database i MyKinsta.

Når du har udfyldt alle felter, skal du klikke på Opret database. 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.

For at opnå dette skal du blot klikke på Tilføj applikation i afsnittet Interne forbindelser og vælge dit program. Du kan markere afkrydsningsfeltet Tilføj miljøvariabler til applikationen, og MyKinsta vil udfylde alle de .env variabler, som din applikation har brug for.

Muligheden "Tilføj intern forbindelse" i MyKinsta for at forbinde en database med en applikation med nøgleværdifelter efterfulgt af en "Tilføj forbindelse"-knap.
Tilslutning af en database til en Laravel 10-applikation.

Dermed er din Laravel 10-applikation implementeret og forbundet til en database.

Sådan bidrager du til Laravel 10

Selv om Laravel vedligeholdes af et kernehold, udvikles det aktivt af over 3.000 frivillige bidragydere.

Vil du være en af disse bidragydere og være med til at forme Laravels fremtid? Hvis du har svaret ja, kan du hjælpe udviklere over hele verden ved at tilføje en ny funktion, rette en fejl eller endda omskrive en forvirrende del af dokumentationen.

Hvis du vil bidrage til Laravel 10, skal du gøre følgende:

  1. Gå til Laravels GitHub-repository 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’erne omhandler det bidrag, du havde til hensigt at lave, så se, om du kan forbedre det.
  2. Hvis dit planlagte bidrag endnu ikke er blevet behandlet af en anden, kan du selv oprette en PR.
  3. Det er ikke alt, der er værd at tilføje til rammekodebasen. Derfor skal du bestræbe dig på kun at implementere forbedringer, der vil være lette at vedligeholde i fremtiden og vil hjælpe langt størstedelen af Laravel-fællesskabet.
  4. Sørg for at overholde Laravels retningslinjer for bidrag for at få en bedre chance for at få dine ændringer sammenføjet med dit framework.

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å disse næste gang.

Laravel 10 Bug Hunt-konkurrence

Laravel 10-logoet efterfulgt af et grønt tegneserieinsekt med grå striber.
Laravel 10 fejljagtkonkurrence.

Laravel 10 har annonceret en fremragende konkurrence, hvor en tilfældig bidragyder har chancen for at vinde 1.000 dollars. Dette var den første konkurrence af sin art i Laravels historie. Den blev designet for at opmuntre fællesskabet til at finde og lappe skjulte fejl i Laravel 10.

Reglerne var ligetil:

  • Kun PR’er, der er indsendt til laravel/framework repository’s 10.x-gren, er berettigede.
  • Kun “ægte” fejlrettelser blev taget i betragtning. Nye funktioner, refaktorering og rettelser af slåfejl blev ikke taget i betragtning.
  • Hver fejlrettelse skal understøttes af en test.
  • Accepterede fejlrettelser blev mærket på GitHub, og en tilfældig vinder vil blive annonceret efter konkurrencens afslutning.

Konkurrencen var slut, da den første stabile version af Laravel 10 blev udgivet den 14. februar 2023.

Resumé

Indtil videre ser Laravel 10 ud til at være ekstremt lovende, og vi glæder os til at dække alle de gaver, som det bringer til PHP-verdenen.

Hvis du leder efter flere måder at forbedre ydelsen af din Laravel-app på, kan du overveje at skifte til en premium-hostingudbyder. Kinstas applikationshostingløsninger er blandt de hurtigste, mest sikre og nemmeste at bruge i branchen, og de er specielt designet med udviklere i tankerne og tilbyder strømlining af produktionen og 24/7 ekspertsupport fra vores egne erfarne udviklere.

Mostafa Said

I’m 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.