【发布时间】:2018-09-15 20:21:59
【问题描述】:
我正在使用 Laravel 构建一个购物应用,其中每个产品的 URL 必须保持简洁。
而不是使用以下永久链接结构:(这很常见,但不利)
www.example.com/products/{product-slug}
我想使用这个永久链接结构:
www.example.com/{product-slug}
为了实现这一点,我在路由文件中使用了隐式路由模型绑定:
Route::get( '{product}', function ( App\Product $product ) {
return view( 'product' ); // this works, but is not what I want
});
我正在覆盖我的 Product 模型中的查找行为:
class Product extends Model
{
public function getRouteKeyName()
{
return 'slug'; // use the 'product.slug' column for look ups within the database
}
}
现在,根据 Laravel 的文档:
Laravel 自动解析定义在路由或控制器操作中的 Eloquent 模型,其类型提示的变量名称与路由段名称匹配。 (View Source)
所以我知道 Laravel 会将 {product} 变量与存储在我的数据库中的产品进行匹配,如果找不到,则返回 404 响应。
这一切对我来说都很有意义......
不过……
每个产品页面都是唯一的,因此在路由匹配{product} 之后,需要将{product} 对象传递给控制器进行进一步处理。
如果我想保留我的隐式模型绑定,如何将此路由传递给控制器?
【问题讨论】:
标签: php laravel binding controller routes