如何根据注入到路由中的模型类型的类型将laravel路由引用到不同的api控制器?

时间:2019-02-16 06:28:54

标签: api conditional laravel-routing

我有一个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-第二个问题是:产品实例是通过它的插件注入到主URL中的。我需要在两个子路径中注入产品实例。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您可以在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();
    }