通过 laravel 自定义请求 class 的参数太少
Too few arguments through laravel custom request class
我添加了自定义请求 class 以在数据库中创建新租户时验证数据。出于某种原因,虽然我收到以下错误:
这是我的自定义请求 class:第 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->validate()
。
如果你想在控制器中调用 validate() 你可以添加这行
$validated = $request->validated();
当您分配一个变量时,控制器中的验证器工作正常;
我之前遇到过同样的问题,在我的情况下我仍然想验证数据。您首先要验证并编写表单请求 class 是有原因的,也许您想重新考虑保留这一行而不是将其从您的控制器中删除。
问题出在命令 $request->validate();
在控制器中你想要使用的是 $request->validated();然后它将 return 你的数据然后你可以将它分配给一个变量,如果验证失败它会将你重定向回输入数据的前一页。基本上你可以替换你的行
$request->validate();
至
$validatedData = $request->validated();
我添加了自定义请求 class 以在数据库中创建新租户时验证数据。出于某种原因,虽然我收到以下错误:
这是我的自定义请求 class:第 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->validate()
。
如果你想在控制器中调用 validate() 你可以添加这行
$validated = $request->validated();
当您分配一个变量时,控制器中的验证器工作正常;
我之前遇到过同样的问题,在我的情况下我仍然想验证数据。您首先要验证并编写表单请求 class 是有原因的,也许您想重新考虑保留这一行而不是将其从您的控制器中删除。 问题出在命令 $request->validate(); 在控制器中你想要使用的是 $request->validated();然后它将 return 你的数据然后你可以将它分配给一个变量,如果验证失败它会将你重定向回输入数据的前一页。基本上你可以替换你的行
$request->validate();
至
$validatedData = $request->validated();