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.php
return [
'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 file
php artisan make:model Product --test
# Create a pest file
php 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' => '[email protected]'
]);
// 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.