【发布时间】:2018-10-13 01:21:02
【问题描述】:
我正在尝试使用带有 JSON 格式数据验证规则的自定义 FormRequest。如果我在控制器中使用相同的代码而不是 FormRequest 类,那么它可以正常工作,见下文:
数组数据(来自 ajax 请求):
[
{
"name": "id",
"value": "1"
},
{
"name": "title",
"value": "My fun project"
}
]
控制器:
public function update(Request $request, $id) {
//convert it to readable json
$jsonReq = $request->json()->all();
$jsonData = array();
foreach ($jsonReq as $json) {
$jsonData[$json["name"]] = $json["value"];
}
$rules = [
'id' => 'required|numeric:1',
'title' => 'required|max:255',
];
$validation = Validator::make($jsonData, $rules);
if ($validation->fails()) {
return $validation->errors();
}
}
在控制器中使用时可以正常工作。但是,我想在一个单独的类中分离我的验证,扩展 FormRequest。这会产生一些错误,很可能是由于数组格式。
class UpdateProjectValidationRequest extends FormRequest {
public function rules() {
$jsonReq = $this->json()->all();
$jsonData = array();
foreach ($jsonReq as $json) {
$jsonData[$json["name"]] = $json["value"];
}
return [
'id' => 'required|max:1', //does not work
$jsonData['title'] => 'required|max:255', //does not work
];
}
控制器:
public function update(UpdateProjectValidationRequest $request, $id) {
// validate against rules
$request->rules();
错误信息:
{
"message": "The given data was invalid.",
"errors": {
"My fun project": [
"My fun project field is required."
],
"id": [
"The id field is required."
],
显然这与格式有关。任何想法如何解决这个问题?请注意,在 foreach 循环之后,数据的格式如下:
{
"id": "1",
"title": "My Fun project",
}
【问题讨论】:
-
也许你需要把json解析成php,先试试看是否解析,通过记录请求的值
标签: json laravel validation