Back to Blog

Laravel 10.12 Released

Julian Beaujardin
Julian Beaujardin May 25th, 2023

The Laravel team released v10.12 with conditional methods added to Sleep, a new job timeout event, inline attachment support for Markdown mailables, timezone validation parameters, a new assertion and more:

Conditional sleep

Bradie Tilley contributed the ability to add conditions to the new Sleep class introduced in Laravel 10.10:

Sleep::for(1)->second()->unless($task->completed());
Sleep::for(1)->second()->when($task->pending());

// Closures
Sleep::for(1)->second()->unless(fn () => $task->completed());
Sleep::for(1)->second()->when(fn () => $task->pending());

Job timeout occurred event

Saeed Hosseini contributed a JobTimedOut event that a queue worker fires when the job has timed out:

use Illuminate\Queue\Events\JobTimedOut;

/**
 * The event to listener mappings for the application.
 *
 * @var array<class-string, array<int, class-string>>
 */
protected $listen = [
    JobTimedOut::class => [
        SendJobTimedOutNotification::class,
    ],
];

Inline attachment support for Markdown mailables

Nuno Maduro contributed inline attachment support for Markdown mailables:

This pull request fixes markdown access to $message variable on template, by simply lazy render the markdown on the moment the $message variable as already available as view data.

See Pull Request #47140 for details.

Method not allowed HTTP assertion

Azim Kordpour contributed an assertion for HTTP status 405 (Method Not Allowed) that you can use to verify a route doesn't respond to certain HTTP verbs:

$this->get('/')->assertOk();

$this->post('/')->assertMethodNotAllowed();
$this->patch('/')->assertMethodNotAllowed();
$this->put('/')->assertMethodNotAllowed();
$this->delete('/')->assertMethodNotAllowed();

Eloquent forceCreateQuietly() method

Volodya Kurshudyan contributed a forceCreateQuietly() method to Eloquent that forces the creation of a model without triggering any model events:

Post::forceCreateQuietly($data);

Add parameters to timezone validation rule

Artyom Yavdoshchuk added support for using parameters with the timezone validation rule:

'timezone' // works as before
'timezone:Africa' // accepts only Africans timezones
'timezone:All' // works the same as without any parameters
'timezone:All_with_BC' // accepts timezones with Backward Compatibility (Europe/Kiev will be accepted)
'timezone:Per_country,US' // accepts only US timezones

Here's an example from the pull request test cases:

$v = new Validator(
    $trans,
    ['foo' => 'australia/sydney'],
    ['foo' => 'Timezone:Australia']
);

$this->assertFalse($v->passes());

Release Notes

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

v10.12.0

Added

  • Added Illuminate/Queue/Events/JobTimedOut.php (#47068)
  • Added when() and unless() methods to Illuminate/Support/Sleep (#47114)
  • Adds inline attachments support for markdown mailables (#47140)
  • Added Illuminate/Testing/Concerns/AssertsStatusCodes::assertMethodNotAllowed() (#47169)
  • Added forceCreateQuietly method (#47162)
  • Added parameters to timezone validation rule (#47171)

Fixed

  • Fixes singleton and api singletons creatable|destryoable|only|except combinations (#47098)
  • Don't use empty key or secret for DynamoDBClient (#47144)

Changed

  • Remove session on authenticatable deletion (#47141)
  • Added error handling and ensure re-enabling of foreign key constraints in Illuminate/Database/Schema/Builder::withoutForeignKeyConstraints() (#47182)

Refactoring

  • Remove useless else statements (#47161)