tomhart/laravel-route-from-model

Laravel Route From Model

v1.1.5 2019-12-10 18:02 UTC

README

Build Status codecov Scrutinizer Code Quality GitHub release (latest by date) GitHub

此库允许仅从 Model 实例构建路由,自动提取参数,而不是手动传递。

简单示例

想象一个名为 test 的路由

Route::get('/test/{name}')->name('test');

调用

route_from_model('test', SomeModel::find(1));

将成功构建路由,因为 nameSomeModel 上的一个属性,可以检索。

现在想象你想要更改路由为

Route::get('/test/{name}/id/{id}/{seo_slug}')->name('test');

使用 Laravel 的默认路由构建,你需要手动到路由构建的每个地方,并指定额外的 idseo_slug 数据应该从哪里来/是什么。只要它们存在于 SomeModel 上,使用上述相同的 route_from_model 调用,它将能够自动构建路由,无需你做任何更改。

关系

使用 route_from_model,你还可以通过使用 -> 自动从模型关系获取数据

Route::get('/test/{name}/{id}/{parent->relationship->value}/{slug}/{child->value}')->name('test');

如果所有这些关系/属性都存在,route_from_model 将能够构建 URL。路由将成功更改,因为所有额外的部分都可以从 Model 中提取出来。

特质

你还可以将 BuildRouteTrait 添加到你的模型中,并且只要模型有一个

private $routeName = 'test';

属性,你可以使用以下方式构建路由

$route = $model->buildRoute();

属性和静态值

你还可以将 route_from_model 与静态值结合使用。想象以下路由

Route::get('/test/{name}/{static}')->name('test');

其中静态值 不是SomeModel 上可用的属性,你可以简单地将它作为一个数组作为第三个参数传递。

route_from_model('test', SomeModel::find(1), ['static' => 'MyValue']);