Heb je je na meer dan tien jaar sinds de introductie van het razend populaire Laravel framework wel eens afgevraagd: “Wat kan Laravel PHP developers nog meer bieden?”

Gezien de mate waarin het PHP development heeft vereenvoudigd – voor zowel beginnende als professionele developers – kan je misschien wel zelfs stellen dat het developers zó heeft verwend dat ze inmiddels geloven dat PHP de gemakkelijkste programmeertaal is die er is.

De vraag is dus: heeft Laravel nog meer verrassingen in petto voor Laravel developers? Of heeft het inmiddels alle mogelijke middelen uitgeput om PHP developers te ondersteunen?

Als we een tipje van de sluier mogen oplichten: Laravel 10 heeft enorm veel te bieden. En dit is precies wat we in dit artikel zullen bespreken terwijl we je meenemen op een reis door de nieuwe features ,fixes en afgeschreven methoden en pakketten van Laravel 10.

Laravel releaseschema

Vroeger bracht het Laravel coreteam jaarlijks twee grote versies uit (één om de zes maanden).

De releasecyclus werd echter gewijzigd toen Taylor Otwell, de bedenker van Laravel, aankondigde dat er nu elk jaar één grote versie zou worden uitgebracht. Hierdoor konden het kernteam en de community meer tijd en moeite besteden aan een specifieke versie van het framework en nieuwe krachtige mogelijkheden introduceren zonder dat er grote veranderingen nodig waren.

Laravel 10 zou op 7 februari 2023 worden uitgebracht, na de release van Laravel 9 op 8 februari 2022. Het team had echter meer tijd nodig om hun kunstwerk af te ronden, en Laravel 10 werd uiteindelijk gepubliceerd op 14 februari 2023.

Laravel 11 wordt nu verwacht in het eerste deel van februari 2024.

Bovendien worden volgens het ondersteuningsbeleid voor alle Laravel versies 18 maanden lang bugfixes aangeboden en twee jaar lang beveiligingsupdates.

Hieronder volgt het verwachte schema voor bugfixes en beveiligingsupdates:

  • Laravel 9 krijgt nog bugfixes tot 8 augustus 2023 en beveiligingsfixes tot 6 februari 2024.
  • Laravel 10 krijgt bugfixes tot 6 augustus 2024 en beveiligingsfixes tot 4 februari 2025.
  • Laravel 11 krijgt naar verwachting bug fixes tot 5 augustus 2025 en security fixes tot 3 februari 2026.

Moet je upgraden naar Laravel 10?

Het is belangrijk om te onthouden dat we de Laravel versie van onze applicatie niet altijd hoeven te upgraden naar de nieuwste versie zodra er een nieuwe versie uitkomt.

Laravel is een open source framework, wat inhoudt dat elke keer dat we een nieuwe Laravel instantie op onze machine installeren, we eigenaar zijn van de codebase van het framework. Dit betekent dat zelfs als de frameworkversie die onze app gebruikt niet meer ondersteund wordt, de app nog steeds werkt; we moeten hem alleen zelf onderhouden.

Daarom wordt algemeen voorgesteld om de stabiliteit van de applicatie voorrang te geven boven upgrades van het framework.

Kortom, je zou moeten overwegen te upgraden naar Laravel 10 als:

  • De applicatie stabiel is met de huidige versie en zonder problemen functioneert.
  • De nieuwe versie een feature toevoegt die je applicatie nodig heeft of een probleem oplost dat je applicatie ondervindt.
  • De applicatie goed wordt getest voordat de wijzigingen in de upgrade in productie worden geduwd.

Laravel 10 updates highlights

Het Laravel 10 logo met het woord "Laravel" in fel oranje en de "10" in grijs.
Laravel 10.

Kinsta is een grote fan van Laravel. Daarom hebben we de hoogtepunten van Laravel 10 verzameld in een enkel artikel dat je kunt gebruiken als referentie en handleiding om alle nieuwe features te gebruiken. Daarom raden we aan deze pagina te bookmarken en van tijd tot tijd opnieuw te bezoeken.

Nieuwe features en updates in Laravel 10

Het meest spannende aan elke nieuwe release is ongetwijfeld de toevoeging van nieuwe features . Dus zonder verder oponthoud beginnen we met een sammenvatting van de nieuwe features en updates in Laravel 10.

1. PHP 8.1: het hart van Laravel 10

PHP 8.1 is de minimaal vereiste PHP versie in Laravel 10. Sommige features van PHP 8.1, zoals readonly properties en array_is_list, worden gebruikt in Laravel 10.

2. Ondersteuning voor PHP 8.2

PHP 8.2 werd uitgebracht op 8 december 2022, slechts twee maanden voor de releasedatum van Laravel 10. Toch zou dit je er niet van moeten weerhouden om PHP 8.2 features te gebruiken, want zonder ook maar iets te hoeven doen is Laravel 10 klaar voor PHP 8.2.

In feite ondersteunt het hele Laravel ecosysteem, inclusief Forge, Vapor en Envoyer, PHP 8.2, en je kunt zelfs PHP 8.2 gebruiken met Laravel 9. Hoe cool is dat!

3. Laravel officiële pakketten upgrades

Niet alleen het framework wordt professioneel onderhouden en regelmatig bijgewerkt, maar ook alle officiële pakketten en het ecosysteem.

Hieronder volgt een lijst van de meest recente officiële Laravel pakketten die zijn bijgewerkt om Laravel 10 te ondersteunen:

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

En nog een traktatie voor fans van Rails, Vue, React en Svelte: Inertiajs 1.0.1 ondersteunt ook Laravel 10.

4. Predis versie-upgrade

Predis is een robuuste Redis client voor PHP die je kan helpen het maximale uit caching te halen om een fantastische gebruikerservaring te bieden. Laravel ondersteunde voorheen zowel versie 1 als 2, maar vanaf Laravel 10 ondersteunt het framework Predis 1 niet meer.

Hoewel de Laravel documentatie Predis noemt als het pakket voor interactie met Redis, kun je ook de officiële PHP extensie gebruiken. Deze extensie biedt een API voor communicatie met Redis servers.

5. Native type declaraties

Laravel gebruikte vroeger DocBlocks in zijn skeletoncode om duidelijk te maken wat een stuk code doet en wat voor soort parameters of reacties je kunt verwachten. Maar dankzij native type declaraties in Laravel 10 zal dit veranderen.

De beste manier om deze verandering uit te leggen is met een eenvoudig voorbeeld. In plaats van dat een functie er zo uitziet:

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

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

…zal hij er zo uitzien:

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

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

Deze verandering is puur ten behoeve van de ervaring van de developer, omdat IDE’s dan de vorm van de verwachte parameter en de respons kennen. Het zal een betere duidelijkheid geven over types als dat niet mogelijk is via de ingebouwde PHP types. Het zal de code editors helpen om beter te presteren met auto-complete features .

6. Alle validatieregels standaard invokable

Als je in Laravel 9 een invokable validatieregel wilde maken, moest je na het Artisan commando een --invokable flag toevoegen. Dit is niet meer nodig omdat alle Laravel 10 regels standaard invokable zijn. Je kunt dus het volgende commando uitvoeren om een nieuwe invokable regel te maken in Laravel 10:

php artisan make:rule CustomRule

7. Native ondersteuning voor het wijzigen van kolommen

In een poging om de noodzaak van het DBAL (doctrine/dbal) pakket te elimineren bij het gebruik van change() om kolommen te wijzigen, is in Laravel 10 een nieuwe feature geïntroduceerd waarmee developers change() methode kunnen gebruiken en kolommen kunnen wijzigen met MySQL, PostgreSQL en SQL Server zonder de noodzaak van extra pakketten. Dit is een belangrijke en riskante verandering, maar we geloven dat het de moeite waard is omdat het de afhankelijkheid van een extra pakket wegneemt.

Zie het onderstaande voorbeeld om de nieuwe feature beter te begrijpen:

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

We nemen nu aan dat we een kolom hebben voor user_balance en dat we het type ervan willen veranderen. Vanaf Laravel 10 kunnen we dit eenvoudig doen:

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

De bovenstaande code zal met succes het type van de kolom veranderen, maar zal ook de attributen UNSIGNED, DEFAULT, en COMMENT droppen. Daarom is het belangrijk te onthouden dat je alle attributen toevoegt als je het type van een kolom verandert:

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

In het geval dat je meerdere databaseverbindingen hebt en DBAL al hebt geïnstalleerd, is het aan te bevelen om de methode Schema::useNativeSchemaOperationsIfPossible() te callen binnen de opstartmethode in AppProvidersAppServiceProvider om native schemabewerkingen te kunnen gebruiken en om native bewerkingen te gebruiken voordat je vertrouwt op het pakket (SQLite ondersteunt dit bijvoorbeeld nog niet):

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

8. Kolomtype native retrieval

Een andere opmerkelijke feature van Laravel 10 is de mogelijkheid om de methode Schema::getColumnType te gebruiken zonder te hoeven vertrouwen op het pakket doctrine/dbal. Momenteel gebruiken we Schema::getColumnType met DBAL om het kolomtype te verkrijgen. DBAL koppelt elk native kolomtype aan zijn DBAL type equivalent, en het ondersteunt niet veel van de kolomtypes die Laravel in verschillende databases gebruikt.

In Laravel 10 daarentegen geeft de nieuwe methode Schema::getColumnType het werkelijke kolomtype terug in plaats van zijn DBAL equivalent. Hiermee kun je ook integratietests schrijven voor de nieuwe native kolomwijzigingsfeature. Je kunt deze feature gebruiken om de datatypenaam of de hele typedefinitie van de opgegeven kolom op te vragen:

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

9. Sneller Hashing algoritme

xxHash is een Hash algoritme dat ongelooflijk snel is. Het beschikt over grote willekeur en spreiding van output, en ook over uniciteit om botsingen te verminderen. Omdat PHP 8.1 ondersteuning biedt voor xxh128, en omdat Laravel 10 draait op PHP 8.1, is het hebben van zo’n betrouwbaar hash algoritme binnen Laravel 10 ideaal.

Het is goed te weten dat Taylor tijdens zijn beoordeling van deze verandering benadrukte dat sommige externe pakketten erop vertrouwen dat de bestandsnamen in het exacte format zijn als de SHA-1 hash, wat het algoritme is dat Laravel vroeger gebruikte voor hashing. Als je een upgrade naar Laravel 10 plant, is het daarom verstandig om dit dubbel te controleren in externe pakketten die je in je app gebruikt.

10. whereExists() methode ondersteuning voor Eloquent Builder

Momenteel vereist het gebruik van whereExists() het configureren van de nested query met behulp van een closure. Gelukkig is het met Laravel 10 nu mogelijk om een Eloquent Builder op te nemen als geneste query. Dit maakt het gebruik van aangepaste buildermethoden, model scopes, enzovoort mogelijk.

We doen dit bijvoorbeeld normaal gesproken als we whereExists():

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

Met Laravel 10 kunnen we in plaats daarvan gewoon dit doen:

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

11. Eager loading optimalisatie

Een van de interessante nieuwe features van Laravel 10 is eager loading optimalisatie als er geen sleutels te laden zijn. Deze verandering is meer een fix dan een feature, omdat het een actueel probleem aanpakt waarbij eager loading relaties een groot aantal onmogelijke queries veroorzaakt.

Momenteel voert Laravel bij het eager loading van relaties die geen sleutels te laden hebben, toch een query uit zoals deze:

select * from `table_name` where 0 = 1

Echter, de nieuwe Laravel 10 update controleert of er überhaupt sleutels beschikbaar zijn en, als die er niet zijn, levert een lege verzameling, waardoor de onnodige database queries niet meer nodig zijn.

12. $path optioneel voor bestandssysteemmethoden

In Laravel 10 is de parameter $path optioneel voor de onderstaande methoden:

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

Dus in plaats van dit te doen om een geüpload bestand op Amazon S3 op te slaan:

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

…kunnen we dit doen:

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

13. Database expressies en grammatica-specifieke formatting

Slechts vier dagen voor de release van Laravel 10 besloot het Laravel coreteam een briljante feature samen te voegen die een grote moeilijkheid aanpakt bij het werken met meerdere databases.

In vorige versies, als we met PostgreSQL en MySQL werkten en de eerste waarde van een lijst als alias wilden retourneren, moesten we ruwe databasecode schrijven en het volgende doen:

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`')))

In de bovenstaande code gebruiken we de functieCOALESCE() om de eerste niet-null waarde terug te geven als een alias met de naam first visitor. Telkens als we zo’n bewerking zouden moeten uitvoeren, zouden we dus opnieuw ruwe databasecode moeten schrijven.

Met de nieuwe feature kunnen we herbruikbare expressieclasses maken die de ruwe expressies en statements die we nodig hebben voor onze queries slechts eenmaal implementeren. Hierdoor hoeven we geen ruwe databasecode meer te schrijven als we meer databasefunctionaliteiten willen gebruiken.

Terug naar het bovenstaande voorbeeld, laten we de nieuwe Laravel 10 aanpak volgen om hetzelfde resultaat te bereiken, maar zonder gebruik te maken van de syntax van ruwe databasecode.

Eerst moeten we twee classes maken – een voor aliasing, en een voor het gebruik van de COALESCE() functie:

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})";
  }
}

Dan kunnen we dit doen om het gewenste resultaat te bereiken voor zowel MySQL als PostgreSQL:

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

Je zou kunnen denken dat het te veel werk is om te schrijven, maar het is zeker de moeite waard omdat je het maar één keer hoeft te schrijven en het bespaart je het gedoe van het veranderen van de syntaxis bij het omgaan met meerdere databases.

Bovendien zal deze verandering volgens de maker van het pull request, Tobias Petry, de deur openen voor talloze mogelijkheden voor pakketten om de meest voorkomende raw expression classes voor je aan te bieden. Hij verklaarde zelfs dat hij die na de release van Laravel 10 in een speciaal pakket aan de community zal aanbieden.

14. SQL serverupdate om FETCH en OFFSET te gebruiken voor queries die geen orderByhebben

Wanneer we orderBy gebruiken in een query zoals deze:

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

Laravel produceert dan een SQL instructie die FETCH en OFFSET gebruikt:

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

Echter, in eerdere versies van Laravel, als we orderBy uit de query laten vallen, valt het terug op de oude methode van offsetting van de resultaten:

$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

Maar nu in Laravel 10 stelt deze nieuwe update je Laravel 10 applicatie in staat om FETCH en OFFSET te gebruiken, zelfs als orderBy niet aanwezig is:

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

Deze update verbetert de snelheid met 33% en vereist minder uitvoeringsstappen.

15. Ondersteuning voor PHPUnit 10

Laravel 10 ondersteunt PHPUnit 10. Het is een framework voor unit testing voor PHP en versie 10 werd uitgebracht op 3 februari 2023. Laravel 10 heeft nog wel ondersteuning voor PHPUnit 9 en 8.

16. Beveiligingsverbeteringen voor de Timeboxclass

Laravel 10 bevat beveiligingsverbeteringen voor de klasse Timebox, die de applicatie moet beschermen tegen timeless timing aanvallen. De Timebox class wordt geïmplementeerd in de methode hasValidCredentials.

DeTimebox class heeft nu ondersteuning voor het afhandelen van uitzonderingen die gegeven worden tijdens de callback uitvoering van een Timebox.

17. dispatch() het gedrag van de methode is hetzelfde in Laravel 10

De dispatch() methode binnen de DispatchesJobs eigenschap controleert nu op unieke jobs, net als de globale dispatch() helperfunctie. Hierdoor nemen dispatch() methoden dezelfde functionaliteiten over in Laravel 10.

18. Laravel Pennant

Als je ooit hebt gewerkt aan een webapplicatie die voortdurend wordt bijgewerkt met nieuwe features, dan begrijp je hoe essentieel featureflags zijn. Toch zou het bewaren van featureflags een aanzienlijke hoeveelheid werk vergen om het goed te doen, maar maak je geen zorgen, Laravel staat voor je klaar met het nieuwe first-party Laravel Pennant pakket.

Laravel Pennant biedt een eenvoudig te gebruiken oplossing voor het onderhouden van featureflags. Het wordt zelfs geleverd met een in-memory arraydriver en een database.

Je kunt eenvoudig een nieuwe feature definiëren:

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

Dan kun je controleren of de gebruiker al dan niet toegang heeft tot deze feature:

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

Het ziet er zelfs mooier uit in Laravel Blade:

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

19. Laravel Process interactie

De nieuwe Process interacties in Laravel 10 maakt het testen en uitvoeren van CLI processen een fluitje van een cent. Het biedt een eenvoudige API om de last van het testen te verlichten. Laten we het voorbeeld pakken uit de oorspronkelijke PR voor de feature van Taylor:

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

Je hebt waarschijnlijk gemerkt hoe eenvoudig en strak de bovenstaande code is. Als we verder gaan met het bouwen van processen, wordt het alleen maar beter:

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

Om deze nieuwe feature te gebruiken bij het testen, kun je een nieuw en fake proces maken zoals dit:

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

Dan kun je het fake proces uitvoeren en de nieuw beschikbare assertions gebruiken:

$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 is nu standaard ingeschakeld bij het maken van nieuwe Laravel projecten. Gebruik de vlag --pest bij het bouwen van een nieuwe app met het Laravel installatieprogramma om deze feature in te schakelen:

laravel new example-kinsta-app --pest

21. String wachtwoord helperfunctie

Laravel 10 kan een willekeurig en veilig wachtwoord maken met een gegeven lengte:

$password = Str::password(12);

Afgeschreven methoden en pakketten in Laravel 10

Laten we nu eens kijken naar de pakketten en methoden die in de release van Laravel 10 zijn geschrapt.

Laravel 10 neemt afscheid van PHP 8.0

Het Laravel framework laat de ondersteuning voor PHP 8.0 vallen in Laravel 10. Vandaar dat als je van plan bent je app te upgraden naar Laravel 10, je eerst de PHP versie moet bijwerken naar PHP 8.1 of PHP 8.2.

Afgeschafte methoden verwijderen

De Laravel documentatie wordt bijgewerkt met alle wijzigingen en belangrijke afschrijvingen. Als je een huidig project gaat migreren naar Laravel 10, moet alle code die een afgeschafte methode gebruikt worden herschreven in een nieuwe aanpak om hetzelfde resultaat te bereiken.

Hier is een lijst van enkele afschrijvingen:

  • De methode Route::home (deprecated in Laravel 9)
  • Functies en methoden rond dispatchNow, afgeschreven om developers aan te moedigen gebruik te maken van dispatchSync, de enige ondersteunde methode voor onmiddellijke dispatch
  • De getBaseQuery methode, die een toBase equivalent heeft
  • De classMaintenanceModeException
  • De MocksApplicationServices property
  • De mail fake’s Mail::failures methode
  • De property $dates (gebruik $casts in plaats daarvan)
  • De methode assertTimesSent()
  • Ondersteuning voor Predis 1 en DBAL 2
  • Alle gerelateerde afschrijvingen in doctrine/dbal sinds Laravel ondersteuning voor versie 2 heeft laten vallen

Zo installeer je Laravel 10

Het Laravel coreteam heeft ervoor gezorgd dat alle developers gemakkelijk toegang kunnen krijgen tot het framework op verschillende omgevingen. Daarom zijn er verschillende manieren om met Laravel 10 op je machine aan de slag te gaan, en je bent helemaal vrij om te kiezen wat voor jou het beste werkt.

Laravel 10 installeren op MacOS

Je kunt gemakkelijk aan de slag met Laravel 10 op MacOS door Docker en Laravel Sail te gebruiken. Je kunt het volgende terminalcommando uitvoeren vanuit de map waar je de applicatie wilt installeren, waarbij je in gedachten houdt dat alleen alfanumerieke tekens, streepjes en underscores zijn toegestaan voor de appnaam:

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

Nadat het installatieproces is voltooid, ga je naar de projectmap en gebruik je Sail om je nieuwe project uit te voeren door het volgende commando in de terminal in te voeren:

./vendor/bin/sail up

Sail zal zijn ingebouwde oplossing gebruiken om je Laravel project uit te voeren met behulp van Docker, en zodra het klaar is, is je applicatie klaar op http://localhost.

Laravel 10 installeren op Windows 10 en 11

Docker Desktop kan worden gebruikt om Laravel 10 snel te installeren op Windows. Maar of je nu Windows 10 of 11 gebruikt, je moet eerst een van de volgende twee opties op je machine inschakelen:

  • Windows Subsystem for Linux 2 (WSL2) is een Windows besturingssysteemfeature waarmee je een Linux bestandssysteem en Linux commandoregeltools rechtstreeks op Windows kunt draaien.
  • Hyper-V backendfeature hiermee kun je een softwareversie van een computer maken en bedienen, bekend als een virtuele machine.

Zodra je aan alle Docker eisen hebt voldaan, kun je het volgende commando in je terminal uitvoeren:

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

Gebruik vervolgens Sail om je applicatie te draaien op http://localhost door het volgende commando in te voeren vanuit de hoofdmap van je nieuw geïnstalleerde Laravel 10 project:

./vendor/bin/sail up

Even terzijde: veel developers verkiezen Linux OS boven andere besturingssystemen omdat ze daarmee efficiënter en sneller kunnen werken. Met WSL kun je genieten van Ubuntu’s veiligheid, prestaties en gamingcompatibiliteit. Ubuntu is een Linux distributie of versie van Linux die bekend staat om zijn gebruiksvriendelijkheid en gebruiksgemak.

Het is aan te raden Visual Studio Code te gebruiken en de officiële Microsoft WSL extensie te installeren om elke map in het Windows Subsysteem voor Linux te kunnen openen, en te profiteren van de volledige featureset van vscode. Daarnaast is de Remote Development extensie een andere optie waarnaar verwezen wordt in de Laravel documentatie.

Laravel 10 installeren met Composer

Of je nu macOS of Windows gebruikt, met Composer kun je in een mum van tijd aan de slag met Laravel 10.

Je moet er eerst voor zorgen dat je PHP ≤ 8.1, node, npm en Composer op je machine hebt geïnstalleerd.

Zodra je dat hebt gedaan, kun je Laravel Installer globaal installeren en gebruiken om je nieuwe Laravel 10 applicatie te installeren:

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

Of je kunt direct een nieuwe Laravel 10 app maken met alleen Composer:

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

Zo installeer je Laravel 11

We zijn nog een jaar verwijderd van de release van Laravel 11. Laravel 11 is momenteel echter wel beschikbaar om de features ervan te testen. Niet alleen is het te gebruiken, maar het bevat ook enkele samengevoegde PR’s op GitHub, zoals het laten vallen van PHP 8.1 ondersteuning.

De --dev flag in Laravel Installer installeert de master branch van de laravel/laravel repository, en nu Laravel 10 uit is, zal Laravel 11 beschikbaar zijn op de master branch. Als je Laravel Installer gebruikt, hoef je alleen maar dit commando in je terminal uit te voeren:

laravel new example-kinsta-app --dev

Of als je liever Composer gebruikt:

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

Om het commando Composer beter te begrijpen, volgt hier een korte uitleg:

  • laravel/laravel: Het pakket voor de Laravel installatie
  • example-kinsta-app: De nieuwe directory voor je nieuwe project (kan gewijzigd worden)
  • dev-master: De volgende versie van Laravel (in dit geval Laravel 11)

Na de installatie van Laravel 11 kun je de versie bevestigen door naar de nieuwe map example-kinsta-app te navigeren en dit Artisan commando uit te voeren:

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

Zo upgrade je een project naar Laravel 10

Kom je in de verleiding om te upgraden naar Laravel 10? Het Laravel coreteam werkt hard aan documentatie om een naadloze en ongecompliceerde upgradehandleiding te geven met aandacht voor alle mogelijke breaking veranderingen. Bekijk gerust de officiële Laravel 10 upgradehandleiding.

Je wil ook Laravel Shift in de gaten houden nu Laravel 10 is uitgebracht. Laravel Shift biedt een eenvoudige en geautomatiseerde aanpak voor het upgraden van je Laravel versie.

Zo deploy je Laravel 10 projecten

Het deployen van Laravel 10 verschilt niet van het deployen van Laravel 9 projecten.

Hier zijn de serververeisten:

  • PHP ≤ 8.1
  • Ctype PHP extensie
  • cURL PHP extensie
  • DOM PHP extensie
  • Fileinfo PHP extensie
  • Mbstring PHP extensie
  • OpenSSL PHP extensie
  • PCRE PHP extensie
  • PDO PHP extensie
  • Tokenizer PHP extensie
  • XML PHP extensie
  • Filter PHP extensie
  • Hash PHP extensie
  • Sessie PHP extensie

Je kunt je Laravel 10 project in enkele minuten deployen en hosten op Kinsta, omdat Laravel een van de lange lijsten is van ondersteunde frameworks voor gehoste apps.

Laravel 10 deployen op Kinsta: stap voor stap handleiding

Er zijn verschillende voordelen aan het hosten en deployen van je Laravel applicaties op Kinsta, waaronder het feit dat je je niet druk hoeft te maken over de deploymentconfiguratie.

Kinsta biedt een gebruiksvriendelijke maar krachtige tool voor het deployen van applicaties, het verbinden met databases, en het bewaken van live prestaties. Deze tool staat bekend als MyKinsta, en in deze sectie zullen we je door de stappen leiden om een Laravel 10 applicatie te deployen.

1. Bereid je applicatie voor

Een voorbeeld van een Laravel 10 applicatiepagina, met bovenaan "Laravel Kinsta", gevolgd door een raster van vier inhoudsvakken met de labels "Kinsta", "Laracasts", "Laravel News" en "Vibrand Ecosystem".
De homepage van een Laravel 10 applicatie die op Kinsta wordt gedeployed.

Ervan uitgaande dat je lokaal een Laravel 10 applicatie hebt, moeten we ervoor zorgen dat die een GitHub repository beschikbaar heeft. We zullen deze repository gebruiken om de applicatie later te deployen.

Je kunt in de hoofdmap van je applicatie een .htaccess bestand opnemen dat het volgende bevat:

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

Voor Laravel leidt dit alle verzoeken om naar public/index.php. Indien nodig kun je dit commando echter bijwerken tijdens het toevoegen van je applicatie (Set up your processes stap) of na het deployen, op de Processes pagina van de applicatie. Je kunt gebruiken:

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

2. Log in bij MyKinsta

Een inlogformulier voor MyKinsta, met bovenaan "MyKinsta Login" gevolgd door de velden "E-mail en "Wachtwoord", met onderaan een paarse knop "Login".
De inlogpagina van MyKinsta.

Ga naar de MyKinsta inlogpagina en voer je e-mailadres en wachtwoord in. Als je nog geen account hebt, kun je een nieuw account registreren en krijg je $20 tegoed in je eerste maand bij elk mogelijk abonnement.

3. Autoriseer Kinsta op GitHub

Zodra je inlogt, zul je merken dat het dashboard opties heeft als  een WordPress site makeneen applicatie maken, of een database maken. We zullen op de Connect GitHub knop drukken om te integreren met GitHub.

Een gedeelte van het MyKinsta dashboard, met drie rechthoekige tegels: "WordPress site" met een actieknop "Create a site"; "Application" met een "Connect GitHub" actieknop; en "Database" met een "Create database" actieknop.
Het dashboard van MyKinsta.

Klik vervolgens op de knop Continue with GitHub. Als je nog niet ingelogd bent op GitHub, krijg je de optie om in te loggen. Dan kun je de Kinsta GitHub applicatie machtigen om toegang te krijgen tot je GitHub account door Authorize Kinsta te selecteren.

Tenslotte zal GitHub je browser omleiden naar MyKinsta om verder te gaan met het instellen van de applicatie.

Een modaal venster met de tekst "GitHub Integration: Connect Kinsta to your Gitub namespace here to import your existing repositories" met een witte knop "Cancel" en een paarse knop "Continue with GitHub".
MyKinsta verbinden met GitHub.

Nadat je verbonden bent met GitHub, krijg je de Add Application popup/modal te zien, die een dropdownmenu heeft om een GitHub repository te selecteren. Klik op het GitHub repository veld en selecteer Edit GitHub permissions in de dropdown.

Het formulier "Add application" in MyKinsta, gericht op de subsectie "Application details", met de tekst "Select branch" gevolgd door twee velden: "GitHub repository" en "Default branch".
Een applicatie toevoegen aan MyKinsta.

Dit opent een nieuw tabblad in je browser naar de GitHub webpagina, waar je kunt kiezen tot welke gegevens Kinsta toegang krijgt. In plaats van toegang tot alle repositories in te schakelen, kun je overwegen om alleen die repositories te kiezen waarvan je wilt dat Kinsta ze gebruikt.

Klik op Only select repositories en kies de repository die je wilt deployen.

Een "Install Kinsta" prompt modal, met opties om toegang te verlenen voor "All repositories" of "Only select repositories", gevolgd door een groene "Install" knop.
Kinsta toegang verlenen tot GitHub.

Klik dan op Install, en je bent helemaal klaar!

Als je terugkeert naar MyKinsta en op het GitHub repository veld klikt, zou de geautoriseerde repository zichtbaar moeten zijn. Bovendien kun je het selectievakje Automatische deployment bij commit aanvinken om MyKinsta in staat te stellen je applicatie automatisch te deployen zodra je wijzigingen aanbrengt in de GitHub repository.

De applicatiesectie "Select branch" in MyKinsta, met de twee velden "GitHub repository" en "Default branch" en een aangevinkt selectievakje met het label "Automatic deployment on commit".
Het selecteren van een repository branch voor MyKinsta.

4. Voeg basisgegevens van de applicatie toe

Je kunt de applicatie nu een naam geven die alleen in het dashboard zal worden gebruikt en kiezen uit 25 datacenterlocaties, zodat je je applicatie kunt plaatsen op de geografische locatie die het dichtst bij je gebruikers ligt. Als je hulp nodig hebt bij het bepalen welk datacenter ideaal is voor je applicatie, bekijk dan onze handleiding voor het kiezen van de juiste datacenterlocatie.

Het gedeelte "Basic details" van het MyKinsta applicatiecreatieproces, met velden voor "Application name" en "Data center location".
De basisgegevens van een applicatie toevoegen.

5. Voeg omgevingsvariabelen toe

De volgende sectie is voor het toevoegen van omgevingsvariabelen en de belangrijkste variabele is de APP_KEY.

Als je nog geen sleutel in je .env bestand hebt, kun je er een genereren met een online Laravel sleutelgenerator. Plaats dan APP_KEY in het veld Sleutel 1 (sleutel 1) en plaats de gegenereerde app key in het veld Waarde 1 (Waarde 1).

Selecteer tenslotte Beschikbaar tijdens runtime en Beschikbaar tijdens bouwproces.

Het toepassingsgedeelte "Environment variables" in MyKinsta, met velden voor "Key 1" en "Value 1", evenals selectievakjes voor "Available during runtime" en "Available during build process".
Toevoegen van omgevingsvariabelen in MyKinsta.

6. Configureer de buildomgeving

Het fijne hier is dat je niets hoeft te configureren! Je kunt doorgaan door op de knop Doorgaan te klikken, en voilà: je hebt de configuratie van de bouwomgeving voltooid. Echter, als je de bouwresources wilt verbeteren om sneller te kunnen bouwen, kun je je voorkeur kiezen uit het veld Build resources.

Het Build path veld is optioneel. Je kunt het leeg laten, en MyKinsta zal de hoofdmap gebruiken.

Het toepassingsgedeelte "Build Environment" in MyKinsta, met velden en selectievakken voor "Build resources", "Set up container image automatically" en "Use Dockerfile to set up container image".
De bouwomgeving van de applicatie configureren.

7. Stel processen en betaalmethode in

Vul voor het onderdeel Resources elk veld in met de volgende informatie:

  • Proces naam: De naam die in de lijst met processen van je applicatie wordt weergegeven.
  • Proces type: Kies zorgvuldig, want dit kan niet worden veranderd als het eenmaal is ingesteld. Je kunt echter extra processen toevoegen en wijzigen, zoals een achtergrondtaak, op de pagina Processes van je applicatie na het deployen.
  • Start commandp: Het “Start” commando voor je proces (niet verplicht).
  • Pod grootte: De pod capaciteit die je verwacht nodig te hebben voor je proces.
  • Instance aantal: Het aantal instances voor je proces (maximaal 50).

Merk op dat je gewoon op Doorgaan kunt klikken zonder het Start commando veld in te vullen, omdat Kinsta automatisch het vereiste commando detecteert tijdens de eerste deployment.

De sectie "Add application: Set up your process" in MyKinsta, met velden voor "Process name", "Process type", "Start command", "Pod size" en "Instance count".
Het instellen van de processen van de applicatie.

Bekijk voor de laatste stap de berekende maandelijkse gebruikskosten voor je app, en bevestig dan je betaalmethode. Als je klaar bent, klik je op de knop Betaalmethode bevestigen.

Het betalingsgegevensscherm in MyKinsta, met "Monthly usage costs" en "Payment method", waarvan de laatste een Visa kaart vermeldt.
Bevestig de betalingsgegevens.

En je bent klaar! Kinsta doet al het werk op de achtergrond om je aanvraag te bedienen.

Het tabblad "Applications" in Mykinsta, met een geïmplementeerde applicatie met de naam "example-kinsta-app", samen met de bron, het type en de laatste wijzigingsdatum.
Het laden van het deployment proces van de applicatie.

Nu heb je toegang tot alle details van het rolloutproces, en tot de tijdelijke URL van je live app, die je later kunt vervangen door je eigen domein.

Het gedeelte "Deployment details" in MyKinsta na het succesvol deployen van de app, met de installatie informatie van de applicatie samen met build- en deploymentverificatiemeldingen.
Succesvolle deployment van Laravel 10 applicatie op MyKinsta.

Je Laravel 10 applicatie staat nu live op Kinsta, maar wat als je in productie een wijziging moet aanbrengen? Wat als we het href attribuut van een anchor tag willen veranderen?

Omdat we de optie Automatische deployment bij commit hebben geactiveerd, zal MyKinsta elke wijziging die we aanbrengen in de uitgezette branche detecteren en automatisch de live app dienovereenkomstig bijwerken.

8. Verbind Lavarel 10 met MySQL database

Nu we onze Laravel 10 applicatie hebben gedeployd, kunnen we moeiteloos een database bouwen en die koppelen aan onze applicatie. Je hoeft alleen maar te klikken op Applicaties in het navigatiemenu aan de linkerkant, dan Dienst toevoegen en Database selecteren.

De "Create a database" optie in MyKinsta, met velden voor het verstrekken van de basisinformatie van de database, gevolgd door een paarse "Create database" knop.
Het toevoegen van een nieuwe database in MyKinsta.

Nadat je alle velden hebt ingevuld, klik je op Create database. Dit zal een nieuwe database opzetten, klaar voor interne en externe verbindingen. In ons scenario hebben we een interne verbinding nodig met het Laravel 10 project dat we ingezet hebben.

Om dat te bereiken hoef je alleen maar te klikken op Applicatie toevoegen in de sectie Interne verbindingen en je applicatie te selecteren. Je kunt het vakje Omgevingsvariabelen toevoegen aan de applicatie aanvinken en MyKinsta zal alle .env variabelen invullen die je applicatie nodig heeft.

De optie "Add internal connection" in MyKinsta om een database met een applicatie te verbinden, met sleutelwaardevelden gevolgd door een knop "Add connection".
Een database verbinden met een Laravel 10 applicatie.

Daarmee is je Laravel 10 applicatie gedeployd en verbonden met een database.

Zo kun je bijdragen aan Laravel 10

Hoewel Laravel wordt onderhouden door een coreteam, wordt het actief ontwikkeld door meer dan 3.000 vrijwillige medewerkers.

Wil jij een van die medewerkers zijn en de toekomst van Laravel helpen vormgeven? Als je ja hebt geantwoord, kun je developers over de hele wereld helpen door een nieuwe feature toe te voegen, een bug op te lossen of door bijvoorbeeld een verwarrend deel van de documentatie te herschrijven.

Om bij te dragen aan Laravel 10, is dit wat je moet doen:

  1. Ga naar de GitHub repository van Laravel en bekijk de pull requests getagd met [10.x] in de titel. Dit zal je een duidelijk beeld geven van alle pull requests voor Laravel 10. Als een van de PR’s betrekking heeft op een bijdrage die je van plan was te leveren, kijk dan of je die kunt verbeteren.
  2. Als de door jou geplande bijdrage nog niet door iemand anders is aangepakt, dan kun je zelf een PR maken.
  3. Niet alles is de moeite waard om aan de codebase van het framework toe te voegen. Streef er daarom naar om alleen verbeteringen door te voeren die in de toekomst gemakkelijk te onderhouden zijn en de overgrote meerderheid van de Laravel gemeenschap zullen helpen.
  4. Zorg ervoor dat je je houdt aan Laravel’s richtlijnen voor bijdrages voor een betere kans dat je wijzigingen worden samengevoegd met het framework.

Een andere reden om fan te zijn van Laravel 10 is dat je geld kunt verdienen voor je bijdragen met bug hunts! Die bekijken we hierna.

Laravel 10 bug hunt wedstrijd

Het Laravel 10 logo gevolgd door een groen tekenfilminsect met grijze strepen.
Laravel 10 bug hunt wedstrijd.

Laravel 10 organiseerde een wedstrijd waarin een willekeurige bijdrager kans maakt op $1.000. Dit was de eerste wedstrijd in zijn soort in de geschiedenis van Laravel. Hij was bedoeld om de community aan te moedigen verborgen bugs in Laravel 10 te vinden en te patchen.

De regels waren eenvoudig:

  • Alleen PR’s ingediend bij de laravel/framework repository’s 10.x branch komen in aanmerking.
  • Alleen “echte” bugfixes kwamen in aanmerking. Nieuwe features, refactoring en typefouten werden niet in aanmerking genomen.
  • Elke bugfix moet ondersteund worden door een test.
  • Geaccepteerde bugfixes werden gelabeld op GitHub, en na afloop van de wedstrijd wordt een willekeurige winnaar bekend gemaakt.

De wedstrijd was voorbij toen de eerste stabiele versie van Laravel 10 werd uitgebracht op 14 februari 2023.

Samenvatting

Tot nu toe lijkt Laravel 10 uiterst veelbelovend, en we zijn enthousiast over alle mooie dingen die het de PHP wereld brengt.

Als je op zoek bent naar meer manieren om de prestaties van je Laravel app te verbeteren, kun je overwegen over te stappen naar een premium hostingprovider. Kinsta’s Applicatie Hosting oplossingen behoren tot de snelste, veiligste en gemakkelijkst te gebruiken in de sector. Ze zijn speciaal ontworpen met developers in gedachten, en bieden stroomlijning van je productieproces en 24/7 deskundige ondersteuning van onze eigen ervaren developers.

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.