The Laravel team released v11.31, which includes dynamic cache/db/mail builders, a cache token repository, a URL::forceHttps() convenience method, and more.
Andrew Brown contributed a cache token repository as an alternative way to store password reset tokens:
– This PR proposes a new CacheTokenRepository which will allow the password reset tokens to be handled via cache. IMO cache is a perfect storage medium because it can be more ephemeral, just like the password reset tokens.
– To enable this new CacheTokenRepository, adjust your config/auth.php
like so:
'passwords' => [
//new cache driver
'customers' => [
'driver' => 'cache',
'store' => 'passwords',
'provider' => 'customers',
'expire' => 60,
'throttle' => 60,
],
//default old database driver
'users' => [
'provider' => 'users',
'table' =>'password_reset_tokens',
'expire' => 60,
'throttle' => 60,
],
],
Steve Bauman contributed the ability to dynamically build a mailer and send it using the Mail::build() method.
– This allows developers to create mailers based on a given configuration instead of being hard-coded in the config files:
use Illuminate\Support\Facades\Mail;
$mailer = Mail::build([
'transport' => 'smtp',
'host' => '127.0.0.1',
'port' => 587,
'encryption' => 'tls',
'username' => 'usr',
'password' => 'pwd',
'timeout' => 5,
]);
$mailer->send($mailable);
Similar to the Mail::build() method, Steve Bauman contributed DB::build() to dynamically create new DB connections that are not defined in your configuration file:
use Illuminate\Support\Facades\DB;
$sqlite = DB::build([
'driver' => 'sqlite',
'database' => ':memory:',
]);
$mysql = DB::build([
'driver' => 'mysql',
'database' => 'forge',
'username' => 'root',
'password' => 'secret',
]);
$pgsql = DB::build([
'driver' => 'pgsql',
// ...
]);
$sqlsrv = DB::build([
'driver' => 'sqlsrv',
// ...
]);
Steve Bauman contributed the ability to dynamically build Cache repositories on-demand using the Cache::build() method.
– Similar to the DB and Mailer dynamic build method, you can create cache repositories not defined in your configuration file:
use Illuminate\Support\Facades\Cache;
$apc = Cache::build([
'driver' => 'apc',
]);
$array = Cache::build([
'driver' => 'array',
'serialize' => false,
]);
$database = Cache::build([
'driver' => 'database',
'table' => 'cache',
'connection' => null,
'lock_connection' => null,
]);
$file = Cache::build([
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
]);
Philip Iezzi contributed the ability to use a backed enumeration with the onQueue()
method of a Bus chain:
// Before
Bus::chain($jobs)
->onQueue(QueueName::long->value)->dispatch();
// After
Bus::chain($jobs)
->onQueue(QueueName::long)->dispatch();
Ollie Read contributed the removeDeferredServices()
application method to remove a deferred service from the application container.
// Before
$deferredServices = $app->getDeferredServices();
unset($deferredServices['auth.password'], $deferredServices['auth.password.broker']);
$app->setDeferredServices($deferredServices);
// After
$app->removeDeferredServices(['auth.password', 'auth.password.broker']);
– This use-case isn't a common one that you'll need, but this method compliments to get and set methods of deferred services nicely.
Ollie Read contributed another low-level change to append and prepend middleware priority to the application builder, allowing access to add middleware after/before methods on the kernel:
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->appendToPriorityList(
[
\Illuminate\Cookie\Middleware\EncryptCookies::class,
\Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class,
],
\Illuminate\Routing\Middleware\ValidateSignature::class
);
$middleware->prependToPriorityList(
[
\Illuminate\Cookie\Middleware\EncryptCookies::class,
\Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class,
],
\Illuminate\Routing\Middleware\ValidateSignature::class
);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
8 - Add forceHttps() Method to Enforce HTTPs Scheme for URLs
Dasun Tharanga contributed the forceHttps() method, which simplifies enforcing HTTPs for URLs requiring such. The method accepts a boolean, making it easy to force HTTPs for a given set of environments:
URL::forceHttps(
$this->app->isProduction()
);
URL::forceHttps(
$this->app->environment('staging', 'production')
);
All Comments