通过 laravel 自定义请求类的参数太少

Mic*_*aes 0 laravel eloquent laravel-validation

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

这是我的自定义请求类:Too few arguments to function App\\Http\\Requests\\CreateTenantRequest::Illuminate\\Foundation\\Providers\\{closure}(), 0 passed and exactly 1 expected在第 51 行,这是 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',
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public function createTenant(CreateTenantRequest $request) {
    $request->validate();
    return 'valid!';
}
Run Code Online (Sandbox Code Playgroud)

小智 9

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

$request->validate();
Run Code Online (Sandbox Code Playgroud)

$validatedData = $request->validated();
Run Code Online (Sandbox Code Playgroud)


小智 6

$request->validate()从您的控制器中删除它。


Jav*_*ozo 6

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

   $validated = $request->validated(); 
Run Code Online (Sandbox Code Playgroud)

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