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

Cross-platform applicaties met React Native

Nog nooit was het ontwikkelen van native mobiele applicaties zo toegankelijk als vandaag. Bij Codana doen we dit door gebruik te maken het React Native, een open-source framework dat werd ontwikkeld door Meta.

Auteur: Jinse Camps
Architect | Analyst
Jinse Camps
dev

Laracon EU 2024

Een fantastisch leerrijke ervaring om met een hoop Laravel gepassioneerde mensen te inspireren! Iets wat niet gemist kan worden en heel veel voeling geeft met de community. Wat een top evenement! Wie zien we volgende edities? 😮

Auteur: Noah Gillard
PHP / Laravel Developer
Noah Gillard AI generated Face
laracon codana persoon

Een efficiënt datamanagementsysteem voor toerisme

Een TDMS of Tourist Data Management System, is simpelweg een platform dat data uit verschillende bronnen ophaalt, intern al dan niet automatisch verwerkt en deze gegevens terug aanbiedt aan externe platformen.

Auteur: Tom Van den Eynden
Web Architect | Coordinator
Tom Van den Eynden
laptop

Systemen voor gegevensbeheer in toerisme

In dit artikel verkennen we wat een TDMS is, waarom het essentieel is voor de toerisme-industrie, en hoe technologieën zoals Laravel en ElasticSearch het verschil kunnen maken. 

Auteur: Tom Van den Eynden
Web Architect | Coordinator
Tom Van den Eynden
tdms

Beveiliging van Laravel 101

In deze blogpost gaan we dieper in op een aantal veelvoorkomende Laravel beveiligingsfouten.

Auteur: Robbe Reygel
PHP developer
laravel

Test Driven Development - toepassing op een project

TDD, of voluit Test Driven Development, is een aanpak van ontwikkeling waarbij we vertrekken van het schrijven van tests. 

Auteur: Sarah Jehin
PHP developer
Sarah Jehin
development