我有一个apiResource路由,其URL包含工厂和产品模型。根据产品类型,我需要两个不同的控制器。我还需要将工厂实例和产品实例注入两个控制器。像这样的东西:
Route::apiResource('factories/{factory}/products', function(Product $product) {
if ($product->type == 'typeA') {
Route::apiResource('factories/{factory}/typeAs', 'TypeAController')
}
if ($product->type == 'typeB') {
Route::apiResource('factories/{factory}/typeBs', 'TypeBController')
}
}
1-第一个问题是这样做的正确方法是什么以及我应该如何定义路线? 2-第二个问题是:产品实例通过其slug注入主URL。我需要在两个子路径中注入产品实例。我该怎么办?
您可以在RouteServiceProvider
中使用绑定路线。当你的路线有factory
参数时,它会返回一个有product_id
的工厂模型:
public function boot()
{
Route::bind('factory', function () {
$product_type = \App\Models\Factory::where('{factory}', request()->type);
return $product_type->firstOrFail();
});
parent::boot();
}