Back to Blog

Laravel 9.15 Released

Julian Beaujardin
Julian Beaujardin June 1st, 2022

The Laravel team released 9.15 with the ability to list only vendor routes, check if a filesystem folder is empty/not empty, an isJson() string helper, and more:

Only vendors listed in route:list command

Ash Allen contributed a --only-vendor flag to the route:list command. Only vendor routes will appear in the terminal, and the command will ignore your application routes.

Only vendors listed in route:list command

This flag is helpful to audit routes that packages may have installed that you're not aware of otherwise or if you are curious about what routes packages register.

HTTP client "throw unless" method

Mahmoud Mohamed Ramadan contributed a throwUnless() function to the Laravel HTTP client. This method will throw an exception if a server or client error occurred and the given condition is false:

$response = Http::post(/* ... */);
$response->throwUnless($condition);

String isJson() method

Daniel Eckermann contributed an isJson() method to the Str and Stringable classes to determine if a string is valid json:

Str::isJson($data);
//=> boolean

Str::of($data)->isJson()
//=> boolean

str($data)->isJson();
//=> boolean

Check if a filesystem directory is empty

@DarkGhostHunter contributed two methods to determine if a filesystem directory is empty or not:

use Illuminate\Support\Facades\File;

if (File::isDirectoryEmpty('john/photos')) {
    return 'You do not have any photos';
}

if (File::isDirectoryNotEmpty('john/videos', true)) {
    return 'You may have one or more videos, even hidden ones.';
}

Show route list counts

Ash Allen contributed a visual route count to the beginning and end of the route:list CLI output:

Show route list counts

Support kebab case for slot name shortcut

Waghabond contributed kebab-case for slot names:

<!-- /resources/views/components/my-layout.blade.php -->
<html lang="en">
    <body>
        {{ $mySlot }}
    </body>
</html>

<!-- /resources/views/components/child.blade.php -->
<x-my-layout>
    {{-- kebab-case slot name --}}
    <x-slot:my-slot>
        <div>My super cool content</div>
    </x-slot:my-slot>
</x-my-layout>

Release Notes

You can see the complete list of new features and updates below and the diff between 9.14.0 and 9.15.0 on GitHub. The following release notes are directly from the changelog

v9.15.0 - 2022-05-31

Added

  • Added --only-vendor option to route:list command (#42549)
  • Added Illuminate/Http/Client/PendingRequest::throwUnless() (#42556)
  • Added Illuminate/Support/Str::isJson() (#42545)
  • Added Illuminate/Filesystem/Filesystem::isEmptyDirectory() (#42559)
  • Added Add counts to route:list command (#42551)
  • Support kebab case for slot name shortcut (#42574)

Revered

Fixed

  • Fix getting '0' from route parameter in Authorize middleware (#42582)

Changed

  • Retain the original attribute value during validation of an array key with a dot for correct failure message (#42395)
  • Allow bootable test traits to teardown (#42521)
  • Pass thrown exception to $sleepMilliseconds closure in retry helper (#42532)
  • Make HasTimestamps::updateTimestamps chainable (#42533)
  • Remove meaningless parameter in Illuminate/View/Concerns/ManagesEvents (#42546)
  • Map integer parameter to parameter name when resolving binding field (#42571)
  • Conditionable should return HigherOrderWhenProxy only when the args number is exactly 1 (#42555)