This library allows a route to be built just from a Model
instance, automatically pulling out the parameters, rather
than having to manually pass them.
Imagine a route called test
:
Route::get('/test/{name}')->name('test');
Calling:
route_from_model('test', SomeModel::find(1));
will successfully build the route, as name
is an attribute on SomeModel
that can be retrieved.
Now imagine you want to change the route to be:
Route::get('/test/{name}/id/{id}/{seo_slug}')->name('test');
Using the default route building in Laravel, you'd need to manually go to everywhere the route
is built, and specify what/where the extra id
and seo_slug
data should come from. Providing they
exist on SomeModel
, using the exact same route_from_model
call above, it will automatically be able
to build the route without you needing to change anything.
Using route_from_model
, you're also able to automatically get data from model relationships too, by using ->
Route::get('/test/{name}/{id}/{parent->relationship->value}/{slug}/{child->value}')->name('test');
Providing all those relationships/attributes exist, route_from_model
will be able to build the URL.
And the route will successfully change, as all the extra parts can be extracted from the Model
.
You can also add the BuildRouteTrait
to your model, and providing the model has a
private $routeName = 'test';
property, you can build a route using:
$route = $model->buildRoute();
You can also combine route_from_model
with static values too. Imagine the route:
Route::get('/test/{name}/{static}')->name('test');
where static isn't an attribute available on SomeModel
, you can simply pass it an array as the third parameter.
route_from_model('test', SomeModel::find(1), ['static' => 'MyValue']);