News

Factory Callbacks and Closure-Based Guards in Laravel

Published
Factory Callbacks and Closure-Based Guards in Laravel image

Two undocumented (before today anyhow) features were recently added to the Laravel 5.6 documentation, and they are both fantastic!

First, factory callbacks allow you to perform additional tasks after making or creating a model:

Thanks to @driesvints for documenting this handy new feature… ✌️ pic.twitter.com/UZ01NxR6yz

— Taylor Otwell ????‍???? (@taylorotwell) June 7, 2018

I mentioned these helpers in Going Deeper with Factory States, and at the time these methods weren’t documented yet. There are four methods now documented thanks to Dries Vints:

// Callback for factories
$factory->afterMaking(App\User::class, function ($user, $faker) {
// ...
});
 
$factory->afterCreating(App\User::class, function ($user, $faker) {
$user->accounts()->save(factory(App\Account::class)->make());
});
 
// Callbacks for factory states
$factory->afterMakingState(App\User::class, 'delinquent', function ($user, $faker) {
// ...
});
 
$factory->afterCreatingState(App\User::class, 'delinquent', function ($user, $faker) {
// ...
});

These callbacks are a clean way to save relational data automatically after creating a new model via a factory.

The second feature that was previously undocumented is Closure-based guards for request authentication:

Simple, Closure based authentication for request authentication in Laravel: https://t.co/PGG1MPVkhd … have used it several times myself but wasn't documented. ????

— Taylor Otwell ????‍???? (@taylorotwell) June 7, 2018

Adding the Auth::viaRequest within one of your service provider’s boot() method is the simplest way to implement custom HTTP authentication:

Auth::viaRequest('custom-token', function ($request) {
return User::where('token', $request->token)->first();
});

You can then reference the custom guard in your app’s config/auth.php guards config:

'guards' => [
'api' => [
'driver' => 'custom-token',
],
],

Laravel is by far one of the most well-documented frameworks in existence, and thanks to individual community members, the documentation keeps getting better!

The documentation can’t possibly cover everything, but with the number of new features and changes in each release, there’s always room for adding new features to the documentation repo.

Paul Redmond photo

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

Filed in

Sponsored

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
Securing Filament plugins with Plumb image

Securing Filament plugins with Plumb

Read article
LayaPHP: Self-Hosted Text Classification for PHP and Laravel image

LayaPHP: Self-Hosted Text Classification for PHP and Laravel

Read article
WhenMounted and BigInt Props in Inertia.js v3.8 image

WhenMounted and BigInt Props in Inertia.js v3.8

Read article
Postcodes for Laravel: GB Postcode Lookup and Geography Data image

Postcodes for Laravel: GB Postcode Lookup and Geography Data

Read article
Laravel 14 Adds a defaults() Method to Eloquent Models image

Laravel 14 Adds a defaults() Method to Eloquent Models

Read article
Laravel AI SDK and Laravel MCP Security Fixes: Update Now image

Laravel AI SDK and Laravel MCP Security Fixes: Update Now

Read article