我正在使用FormRequest
类进行GET请求验证。规则似乎是正确的,但验证不起作用。
我的FormRequest
类看起来像这样:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ShowTheSubjectRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'subject_code' => 'required|exists:the_subjects,sub_x',
];
}
public function messages()
{
return [
'subject_code.required' => 'Required,Can\'t Be Empty',
'subject_code.exists' => 'Entry does\'t exist with us.Choose Correct'
];
}
{
我总是得到以下回应:
{
"message": "The given data was invalid.",
"errors": {
"subject_code": [
"Required,Can't Be Empty"
]
}
}
我在某个地方读到FormRequest
不适合GET方法。我还可以如何验证GET请求?
3条答案
按热度按时间y0u0uwnf1#
不能对GET请求使用表单验证,因为表单验证的是请求体,而GET请求没有请求体。要验证查询字符串(
?
之后的URL部分),需要使用一个中间件,该中间件在出现错误时会中止请求。因为这种验证可能是特定于控制器的,所以您还可以在控制器
__construct
中定义一个Closure中间件nwsw7zdq2#
要在路由参数上定义简单的正则表达式验证规则,可以在
web.php
中的路由定义末尾使用where()
方法,如下所示ocebsuys3#
一个简单的选择是只获取您想要验证的值并将它们合并到请求主体中。只需向
FormRequest
类添加一个prepareForValidation()
方法即可。这个问题并没有说明这个值是否是一个路由参数(例如
https://example.com/api/v1/subject_code_goes_here/foo
)或查询字符串项(例如https://example.com/api/v1/foo?subject_code=xxx
.)在route参数的情况下,它看起来像这样:
查询字符串项如下所示: