Laravel 8.65 Released

News

October 20th, 2021

laravel8.jpg

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:

1// Displays: "Voice Recording Stored"
2echo Str::headline(
3 class_basename(\App\Events\VoiceRecordingStored::class)
4);
5 
6// Displays: "Using Laravel With Redis"
7echo Str::studlyWords("using-laravel-with-redis");

Gate Policy Callback

Lennart Carstens-Behrens contributed the ability to pass policy callbacks to a gate:

1Gate::inspect([PostPolicy::class, 'update'], $post)->authorize();
2Gate::inspect(InvokablePolicy::class)->authorize();
3Gate::check([PostPolicy:class, 'update'], $post);
4Gate::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:

1// config/auth.php
2return [
3 'remember' => now()->addDays(7)->diffInMinutes(),
4];

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:

1# Create a unit test file
2php artisan make:model Product --test
3# Create a pest file
4php 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:

1$request = Request::create('/', 'GET', [
2 'users' => [1, 2, 3],
3 'roles' => [4, 5, 6],
4 'email' => 'test@example.com'
5]);
6 
7// returns [4, 5, 6]
8$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:

1public function rules()
2{
3 return [
4 'date' => 'date_format:Y-m-d,m-d',
5 ];
6}

PostgreSQL "update from" Method

Dries Vints contributed an updateFrom method for the PostgreSQL grammar:

1/*
2update "users" set "email" = ?, "name" = ? from "orders"
3where "users"."id" = ? and "users"."id" = "orders"."user_id"
4*/
5$builder
6 ->from('users')
7 ->join('orders', 'users.id', '=', 'orders.user_id')
8 ->where('users.id', '=', 1)
9 ->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:

1$response = TestResponse::fromBaseResponse(
2 (new Response('', 302))
3 ->withHeaders(['Location' => 'https://url.com'])
4);
5 
6$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.

Filed in:

Paul Redmond

Full stack web developer. Author of Lumen Programming Guide and Docker for PHP Developers.