Artisan wordt interactiever

Vanaf Laravel 10 wordt Artisan interactiever. Stel dat je vraagt om een model te maken, maar je vergeet de naam door te geven:

php artisan make:model

In plaats van een foutmelding te geven, zal Artisan je gewoon de naam van het model vragen, maar ook of je een migratie, een factory, e.d. wilt maken. Heel handig!

php artisan make:model
 
What should the model be named?
❯ Post
 
  Would you like any of the following? [none]
  none ......................................................................................... 0
  all .......................................................................................... 1
  factory ...................................................................................... 2
  form requests ................................................................................ 3
  migration .................................................................................... 4
  policy ....................................................................................... 5
  resource controller .......................................................................... 6
  seed ......................................................................................... 7

 

Is jouw applicatie up-to-date?

Een up-to-date applicatie geeft je niet alleen de nieuwste functies en verbeteringen, maar zorgt o.a. ook voor maximalisatie van de veiligheid en de prestaties.

diff

Het Laravel 10 skelet gebruikt native types in plaats van docblocks

Vanaf Laravel 10 zal het skelet native types gebruiken in plaats van docblocks.

Het team heeft ook generieke type annotaties toegevoegd, wat de auto-completion ook bij het coderen drastisch zal verbeteren (als je code-editor generieke annotaties ondersteunt).

Zie de PR op GitHub: [10.x] Gebruikt PHP Native Type Declarations 🐘

Bijvoorbeeld, in het Laravel skelet zal de schedule() methode in app/Console/Kernel.php er zo uitzien 🤩

Tweet taylor otwel types of packages

Officiële packages zullen ook native types gebruiken

Eigenlijk hoef je niet te wachten tot Laravel 10 om te genieten van native type hints in officiële Laravel packages. Het Laravel core dev team was dit al doorheen het jaar mee aan het integreren, wat zeker al zijn vruchten heeft afgeworpen:

Geen ondersteuning meer voor PHP 8.0

Als Laravel 10 ondersteuning voor PHP 8.0 laat vallen en minimaal 8.1 vereist, betekent dat twee dingen als je wilt upgraden:

    Ofwel overschakelen naar PHP 8.1
    Of PHP 8.2

Waarom laten ze PHP 8.0 support nu al vallen? PHP 8.0 is sinds 26 Nov 2022 niet meer in Active support, en valt dus nu enkel nog onder Security fixes. Aangezien dat er ook niet meer met LTS versies gewerkt wordt, is de visie vanuit Laravel dat ze zo goed mogelijk mee gaan met de technologie die er nu in de community aanwezig is. Blijven hangen op PHP 8.0 zou daarom ook niet passen bij hun nieuwe visie.

Je kan de pull request terug vinden op GitHub: [10.x] Drop PHP 8.0

Doctrine/dbal is niet meer nodig om kolommen in migraties te wijzigen

In een poging om de noodzaak voor doctrine/dbal package te elimineren bij het gebruik van change() om kolommen te wijzigen, komt er een nieuwe functie naar Laravel 10. Deze functie zal ontwikkelaars in staat stellen om de change() methode te gebruiken en kolommen op MySQL, PostgreSQL, en SQL Server te wijzigen zonder de noodzaak van een extra packages. Dit is een belangrijke en risicovolle verandering, maar we geloven wel dat het de moeite waard is.

Om de nieuwe functie beter te begrijpen, zie dit voorbeeld:

$table->integer('user_balance')->unsigned()->default(0);

// `user_balance` is een integer, unsigned, met een standaard waarde '0'.

Nu gaan we ervan uit 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(); 

// Dit verandert `user_balance` naar een bigInteger in de de plaats van een integer

De bovenstaande code verandert met succes het type van de kolom, maar laat ook de attributen UNSIGNED en DEFAULT vallen. Daarom is het belangrijk dat je niet vergeet alle attributen toe te voegen wanneer je het type van een kolom wijzigt:

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

In het geval dat je meerdere databaseverbindingen hebt en doctrine/dbal al hebt geïnstalleerd, is het aan te raden om de Schema::useNativeSchemaOperationsIfPossible() methode aan te roepen binnen de boot methode in App\ProvidersAppServiceProvider om native schema operations te kunnen gebruiken en om native operations te gebruiken voordat je vertrouwt op de package (SQLite ondersteunt dit bijvoorbeeld nog niet):

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

Kolom types opvragen

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

In Laravel 10 daarentegen geeft de nieuwe methode Schema::getColumnType het werkelijke kolomtype terug in plaats van het doctrine/dbal-equivalent. Hiermee kunt u ook integratietests schrijven voor de nieuwe native kolomwijzigingsfunctie. Je kan deze functie gebruiken om de naam van het gegevenstype of de gehele typedefinitie van de gespecificeerde kolom te verkrijgen:

Deprecations van Laravel 9

Methodes die in Laravel 9 stonden gemarkeerd als deprecated zullen zijn verwijderd in Laravel 10. De upgrade guide die je kan terug vinden in de documentatie bevat een lijst met de afgeschreven methodes en de potentiële gevolgen.

Hier zijn enkele deprecations die we hebben terug gevonden:

  • Verwijderen van verschillende deprecations PR #41136
  • Verwijderen van deprecated date properties PR #41136
  • Verwijderen van de handleDeprecation methode PR #42590
  • Verwijderen van de assertTimesSent methode PR #42592
  • Verwijderen van de ScheduleListCommand's $defaulName property Diff 419471e
  • Verwijderen van de deprecated methode Route::home PR #42614
  • Verwijderen van deprecated dispatchNow functionaliteit PR 42591

 

Zelf ook aan het denken aan digitalisatie?

Bij Codana kan je terecht met al je vragen en samen werken we een plan uit met een duurzame blik op de toekomst!

Laravel pennant logo

Laravel Pennant - Feature flag systeem

Laravel Pennant is een package dat gepubliceerd is door het Laravel team samen met de release van Laravel 10. Pennant maakt het mogelijk om vanaf L10 met feature flags te werken zonder externe packages van community contributors.

Feature flags stellen je in staat om met vertrouwen incrementeel nieuwe applicatiefuncties uit te rollen, nieuwe interfaceontwerpen te A/B-testen, een trunk-based ontwikkelingsstrategie aan te vullen, en nog veel meer.

Je kan Laravel Pennant heel gemakkelijk installeren met composer:
 

composer require laravel/pennant

Om een kort voorbeeld te geven van de werking van feature flags, je kan een functionaliteit alleen inzetten voor een selecte groep gebruikers in uw productieomgeving. Dit is geweldig voor bijvoorbeeld A/B-tests.
 

use Laravel\Pennant\Feature;
use Illuminate\Support\Lottery;
 
Feature::define('nieuwe-coupon-bestellings-flow', function () {
    return Lotterij::odds(1, 10);
});

Controleer of de gebruiker toegang heeft tot de functie:

if (Feature::active('nieuwe-coupon-bestellings-flow')) {
    //
}

Er is zelfs een Blade directive:

@feature('nieuwe-coupon-bestellings-flow')
    …
@endfeature

Meer te weten komen over Laravel Pennant, neem een kijkje in de officiële documentatie.

Auteur: Noah Gillard
PHP / Laravel Developer
Noah Gillard AI generated Face

More insights

Saloon - Package / SDK API integrations

API integraties voor een waaier aan services. Weinig tot geen herbruikbare code? Met Saloon maak je er een compacte / overzichtelijke SDK/Package van die je kan hergebruiken in al je projecten en kan maintainen op 1 plek.

Auteur: Noah Gillard
PHP / Laravel Developer
Noah Gillard AI generated Face
Saloon hero image

Codana wint Digital Champ of the year award 2022

Codana is de winnaar van de FeWeb Digital Champ award 2022

Auteur: Joris De Groot
Strategic Director and Managing Partner
Joris De Groot
FeWeb Digital Champ award Codana

De ideale eerste werkplek

Ik ben Ward Vandevoort, 22 jaar en begin november 2021 ben ik gestart bij Codana als junior backend developer. Ontdek mijn verhaal bij Codana! 

Auteur: Ward Vandevoort
Developer
Ward Vandevoort
groepsfoto

Teambuilding met internationale collega's

Een zalige teambuilding in Antwerpen!

Auteur: Noah Gillard
PHP / Laravel Developer
Noah Gillard AI generated Face
groepsfoto codana burgerij

Het leven als React developer bij Codana: 1 jaar in dienst

“U kan bij ons aan de slag als React developer!”. Wow, zalig! Ik was natuurlijk super blij dit te horen! Maar, ik had nog nooit een lijn React geschreven.

Auteur: Thomas Timmermans
Frontend Developer
Thomas Timmermans
Ik na 1 jaar in dienst

Nova 4.0 is er!

De belangrijkste nieuwigheden uitgelicht.

Auteur: Noah Gillard
PHP / Laravel Developer
Noah Gillard AI generated Face
Thumbnail Blog Nova 4 Release Codana Styled