Laravel 10

Marcus Olsson,

Nytt år, ny version av Laravel!

Som alltid finns det de som redan i detalj har skrivit om alla nyheterna (läs bl.a. Laravels officiella blogginlägg, Laravel News m.fl.) – men här i alla fall tre korta spännande nyheter (+ Pennant).

Type hinting

Hela skelettet ("application skeleton") för en nyinstallerade applikation är numera fullt type hint:at för både returtyper och argument (detta blev knepigt på svenska...?) – detta är dessutom fullständigt bakåtkompatibelt, så bara för att man går från Laravel 9 till 10 behöver man inte gå igenom och implementera allt detta direkt.

Men för framtida applikationer så hjälper detta en att skriva mer robust och säkrare kod.

Processes

Har du någonsin kört en process ifrån din Laravel-app? För t.ex. esignering.se kör jag flera processer för diverse jobb, bl.a. för att skapa PDF-kvitton och för att trigga cache- och minifieringsprocesser. Då har jag främst använd mig av Symfonys robusta process-bibliotek.

1use \Symfony\Component\Process\Process;
2 
3$process = Process::fromShellCommandline('my-process');
4$process->setTimeout(10);
5$process->run();
6return $process->getOutput();
1use \Symfony\Component\Process\Process;
2 
3$process = Process::fromShellCommandline('my-process');
4$process->setTimeout(10);
5$process->run();
6return $process->getOutput();

Men nu har Laravel ett helt eget processlager för att hantera CLI-kommandon, lite mer "fluently" som sig bör i Laravel:

1use Illuminate\Support\Facades\Process;
2 
3$result = Process::timeout(10)->run('my-process');
4 
5return $result->output();
1use Illuminate\Support\Facades\Process;
2 
3$result = Process::timeout(10)->run('my-process');
4 
5return $result->output();

Med får man också enkla "helpers" för att identifiera resultatet av ens process:

1$result->successful();
2$result->failed();
3$result->exitCode();
4$result->output();
5$result->errorOutput();
1$result->successful();
2$result->failed();
3$result->exitCode();
4$result->output();
5$result->errorOutput();

Läs mer i dokumentationen.

Str::password

En liten nyhet i det stora hela – men nu när man t.ex. skapar användare dynamiskt och sätter ett tillfälligt lösenord (eller om man t.ex. vill generera ett lösenord "on-the-fly") så kan man använda denna smidiga helper för att skapa säkra lösenord:

1use Illuminate\Support\Str;
2 
3$password = Str::password();
4// 'EbJo2vE-AS:U,$%_gkrV4n,q~1xy/-_4'
1use Illuminate\Support\Str;
2 
3$password = Str::password();
4// 'EbJo2vE-AS:U,$%_gkrV4n,q~1xy/-_4'

Inga mer slumpmässiga strängar med Str::random(12)!

Läs mer i dokumentationen.

Laravel Pennant

Pennant är ett nytt officiellt paket från Laravel för att hantera feature flags (i.e. funktionalitet som man kan reglera på/av direkt i kod utan att t.ex. behöva deploya en uppdatering.)

Endast hunnit skimma igenom dokumentationen hittills, verkar kraftfullt och smart byggt – men inget som jag alltför ofta har behöv av i nuläget, men onekligen bra att ha för de som t.ex. A/B-testar funktionalitet i sina applikationer.

Vidare så droppar Laravel 10 stöd för PHP 8.0 (som numera är "security fixes only".)

I.o.m. denna releasen så innebär det att Laravel 9 inte längre kommer att motta nya funktioner – men däremot säkerhetsuppdatering fram till 23 augusti i år.

Som vanligt blir det till att läsa igenom upgrade guiden och mixtra med ens egna projekt (först ut blir förmodligen denna webbplatsen och esignering.se) för att identifiera paket som ännu saknar stöd för Laravel 10. Vet i alla fall att jag själv har ett par paket att uppdatera de kommande dagarna och veckorna när tid finnes.

Happy coding!