【问题标题】:Too few arguments through laravel custom request class通过 laravel 自定义请求类的参数太少
【发布时间】:2020-02-15 10:31:53
【问题描述】:

我添加了一个自定义请求类,用于在数据库中创建新租户时验证数据。出于某种原因,虽然我收到以下错误:

这是我的自定义请求类:第 51 行的 Too few arguments to function App\\Http\\Requests\\CreateTenantRequest::Illuminate\\Foundation\\Providers\\{closure}(), 0 passed and exactly 1 expected,这是 message() 函数的右括号

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class CreateTenantRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        $product_id = $this->get('product_id');

        return [
            'product_id' => 'required|exists:products,id|numeric',
            'name' => 'required|string|max:50',
            'email' => ['required',
                Rule::unique('tenants')->where(function($query) use ($product_id) {
                    return $query->where('product_id', $product_id);
                })
            ],
            'reseller_user_id' => 'numeric',
            'user_id_from_company' => ['required',
                Rule::unique('tenants')->where(function($query) use ($product_id) {
                    return $query->where('product_id', $product_id);
                }),
                'max:255'],
        ];
    }

    public function messages()
    {
        return [
            'user_id_from_company.unique' => 'The user ID already exists for this product',
        ];
    }
}

以下是控制器中调用验证的实际函数:

public function createTenant(CreateTenantRequest $request) {
    $request->validate();
    return 'valid!';
}

【问题讨论】:

  • 请问您到底是哪里出错了?
  • 在评论$request-&gt;validate();后重试,看看会发生什么。
  • 啊,是的,注释掉 $request->validate() 修复了它:) 我不知道它会自动验证请求。谢谢! :D
  • 如果您将此添加为 anwser,我会将其标记为解决方案 @VibhaChosla

标签: laravel eloquent laravel-validation


【解决方案1】:

我之前也遇到过同样的问题,就我而言,我仍然想验证数据。您首先要验证并编写 Form Request 类是有原因的,也许您想重新考虑保留此行而不是将其从 Controller 中删除。 问题出在命令 $request->validate(); 在控制器中,您要使用的是 $request->validated();然后它将返回您的数据,然后您可以将其分配给一个变量,如果验证失败,它会将您重定向回输入数据的上一页。基本上你可以更换你的线

$request->validate();

$validatedData = $request->validated();

【讨论】:

    【解决方案2】:

    如果你想在控制器内部调用 validate() 你可以添加这一行

       $validated = $request->validated(); 
    

    分配变量时,控制器中的验证器正常工作;

    【讨论】:

      【解决方案3】:

      从你的控制器中移除 $request-&gt;validate() 这个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        • 2015-08-04
        • 1970-01-01
        • 1970-01-01
        • 2017-05-30
        • 2019-04-04
        相关资源
        最近更新 更多