Laravel控制器方法如何处理多个表单请求参数?

时间:2019-04-30 07:05:24

标签: laravel

几年后,我将回到Laravel,并试图了解Laravel中编码的现有REST API的工作方式。我不明白带有多个“表单请求”参数的特定控制器方法的工作原理(或实际上是否可行)。

REST API是用Laravel 5.1编码的。我查看了官方文档(包括5.1和最新版本),并尝试在Web和SO上搜索相关主题(例如,“ laravel控制器多个表单请求”,“ laravel控制器多个类型提示请求”等)。 ,但似乎找不到清晰的解释。也许我从错误的角度看它。

public function store(ProductRequest $productRequest, PromoRequest $promoRequest)
{
    // Validate product
    $product = new Product($productRequest->all());
    // Validate promo
    if ($promoRequest->get('promo')) {
        $promo = new Promo($promoRequest->get('promo'));
    }

    ...
}

在大多数文档中,控制器将仅接受一个Request对象。我确实确实看到了一些具有多个Form Request参数的示例,但通常建议它们仅使用一个Form Request。除了最佳实践,此代码如何工作?调用此方法时,Laravel如何知道如何将请求拆分为两个单独的表单请求类?

请随时让我知道是否以及如何更清楚地解释我的问题。

2 个答案:

答案 0 :(得分:0)

  

Laravel服务容器是用于管理类的强大工具   依赖项并执行依赖项注入。依赖注入   是一个花哨的短语,从本质上讲是这样:类依赖是   通过构造函数“注入”到类中,或者在某些情况下,   “设置”方法。

您可以在此处了解更多信息:https://laravel.com/docs/5.8/container

编辑:其他问题: 仍然,我不明白如何将HTTP请求(只有一个)拆分为两个不同的Request类?

HTTP请求未拆分;它只是通过两个类发送。

例如:

function example(Request $request) { 
    $productRequest = new ProductRequest($request);
    $promoRequest = new PromoRequest($request);
}

会一样。

答案 1 :(得分:0)

你可以这样写:

function example(Request $request) { 
    $productRequest = new ProductRequest($request->all());
    $promoRequest = new PromoRequest($request->all());
}

但是在验证时你应该改变这样的方式:

$data = $productRequest->validate($productRequest->rules());

我在 laravel 8 中测试的另一种方法是在方法参数中添加两个表单请求对象,例如:

function example(ProductRequest $productRequest,PromoRequest $promoRequest) { 
    $productRequest->validated();
    $promoRequest->validated();
}