News

Laravel 8.65 Released

Published
Laravel 8.65 Released image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

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' => '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.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article