Laravel 8.65 Released
Published on by Paul Redmond
The Laravel team released 8.65 with the ability to generate test files during make commands, a string headline method, getting a subset of data as a collection from the request instance, and the latest changes in the v8.x branch.
String Headline Method
Steve Bauman contributed a headline()
method to Str
and Stringable
, which converts a string into Studly Words
:
// Displays: "Voice Recording Stored"echo Str::headline( class_basename(\App\Events\VoiceRecordingStored::class)); // Displays: "Using Laravel With Redis"echo Str::studlyWords("using-laravel-with-redis");
Gate Policy Callback
Lennart Carstens-Behrens contributed the ability to pass policy callbacks to a gate:
Gate::inspect([PostPolicy::class, 'update'], $post)->authorize();Gate::inspect(InvokablePolicy::class)->authorize();Gate::check([PostPolicy:class, 'update'], $post);Gate::any([PostPolicy::class, ['update', 'edit']], $post);
If you'd like to dig deeper, check out Pull Request #39185.
Configurable "Remember Me" Cookie Duration
James Freeman contributed a configurable duration for the "remember me" cookie, configurable via the config/auth.php
file:
// config/auth.phpreturn [ 'remember' => now()->addDays(7)->diffInMinutes(),];
The default expiration is five years, which will continue to be the case if you don't set a configuration value.
Generate Tests With Various Artisan Commands
Luke Downing contributed the ability to use the --test
or --pest
flag to generate a test during artisan "make" commands:
# Create a unit test filephp artisan make:model Product --test# Create a pest filephp artisan make:model Product --pest
Here's a list of commands that now have these flags:
-
make:command
-
make:job
-
make:listener
-
make:mail
-
make:model
-
make:notification
-
make:controller
-
make:middleware
Subset of Data from a Request Collection
Iraldo Arévalo Delfín contributed the ability to get a subset of input data from the request's collect()
function:
$request = Request::create('/', 'GET', [ 'users' => [1, 2, 3], 'roles' => [4, 5, 6], 'email' => 'test@example.com']); // returns [4, 5, 6]$request->collect(['roles'])->all();
Validate Multiple Date Formats
Steve Bauman contributed the ability to pass multiple date formats to the date_format
validation rule. The rule validates that the input must match one of the possible formats:
public function rules(){ return [ 'date' => 'date_format:Y-m-d,m-d', ];}
PostgreSQL "update from" Method
Dries Vints contributed an updateFrom
method for the PostgreSQL grammar:
/*update "users" set "email" = ?, "name" = ? from "orders"where "users"."id" = ? and "users"."id" = "orders"."user_id"*/$builder ->from('users') ->join('orders', 'users.id', '=', 'orders.user_id') ->where('users.id', '=', 1) ->updateFrom(['email' => 'foo', 'name' => 'bar']);
For further details, I'd encourage you to check out Pull Request #39151.
Assert Redirect Contains Test Method
Fredrik contriubted the assertRedirectContains()
method on a TestResponse
instance:
$response = TestResponse::fromBaseResponse( (new Response('', 302)) ->withHeaders(['Location' => 'https://url.com'])); $response->assertRedirectContains('url.com'); // true
Release Notes
You can see the complete list of new features and updates below and the diff between 8.64.0 and 8.65.0 on GitHub.