php - Laravel 5.7:在视图中生成嵌套 url 的最简洁方法
问题描述
我目前有嵌套路线。
假设我有
Route::resource('a', 'AController');
Route::resource('a.b', 'BController');
Route::resource('a.b.c', 'CController');
在我看来,有没有比生成 URL 更好的方法:
route('a.b.c.show', ['a'=>$aId, 'b'=>$bId, 'c'=>$cId])
嵌套网址有点烦人。为什么我们不能只传递一个 Eloquent 模型实例?喜欢route('a.b.c.show', $cInstance)
谢谢
解决方案
我经常将生成 url 的职责传递给模型,例如使用 getter:
$cInstance->url
public function getUrlAttribute() {
return route('a.b.c.show', $this);
// or:
// return action([CController::class, 'show'], ['a' => $this]);
}
但这取决于您的用例。普通方法也能正常工作,比如如果你想添加比模型已经知道的更多的参数。例如:
public function url($b, $c) {
return route('a.b.c', ['a' => $this, 'b' => $b, 'c' => $c]);
}
但是,如果您只是在使用模型之前从模型中获取 ID,例如在这种情况下:
$aId = $a->id;
return route('a', ['a' => $aId]);
然后 Laravel 实际上已经支持这一点:route('a.b.c.show', compact('a', 'b', 'c'))
应该可以正常工作。Eloquent 模型实现了Illuminate\Contracts\Routing\UrlRoutable
接口,它有一个getRouteKey()
路由器知道如何使用的方法。
推荐阅读
- stm32 - 在两次传输之间禁用 STM32H7 上的 SPI 外设?
- svn - 加载修订更改 svn:author
- c# - 在使用它的应用程序关闭后持有 WCF TCP 端口的系统进程
- android - OnverificationCompleted() 被调用但没有收到任何 otp
- python - 导入另一个python文件时Django runserver没有运行
- vb.net - Vb-net 在准备表格时隐藏布局
- php - PHP 错误视频无法使用过期/签名的视频嵌入 url 播放
- sql - 获取两个表之间的完全匹配
- scala - 从 scalatest 生成 XML 报告时,有没有办法让“给定”、“何时”、“那么”可见?
- angular - 将文本作为文件发送到具有其他值的后端