Php Laravel验证:必须是一个带“";json";规则
我正在制作一个LaravelAPI,但我似乎无法在其中一篇文章中发送JSON数据。我检查了StackOverflow中的其他帖子,但是我的JSON请求似乎是正确的,所以我似乎找不到错误: 以下是我的控制器方法中的代码:Php Laravel验证:必须是一个带“";json";规则,php,json,laravel,validation,Php,Json,Laravel,Validation,我正在制作一个LaravelAPI,但我似乎无法在其中一篇文章中发送JSON数据。我检查了StackOverflow中的其他帖子,但是我的JSON请求似乎是正确的,所以我似乎找不到错误: 以下是我的控制器方法中的代码: $validator = Validator::make($request->all(), [ "name" => "required|string", "colors" => &quo
$validator = Validator::make($request->all(), [
"name" => "required|string",
"colors" => "json",
"sizes" => "json"
]);
if($validator->fails())
return response()->json(["errors" => $validator->errors()], 400);
以下是请求主体:
{
"name": "Test",
"colors": {
"Man": "#0000ff",
"Second": "#FF0000"
},
"sizes": {
"titles": "20px"
}
}
错误:
{
"errors": {
"colors": ["The colors must be a valid JSON string."],
"text_sizes": ["The text sizes must be a valid JSON string."]
}
}
有什么问题吗?谢谢大家! 您需要传递一个JSON字符串,而不是JSON对象。这可以通过
json\u encode
或json.stringify
实现
作为对您最后评论的答复:
您可以在前端应用程序中使用JSON.stringify
执行此操作,也可以使用prepareForValidation()实现表单请求
您可以在json属性上执行json\u encode()
。比如:
protected function prepareForValidation()
{
$this->merge([
'colors' => json_encode($this->colors),
'text_sizes' => json_encode($this->text_sizes)
]);
}
或者在您的情况下:
$validator = Validator::make($request->merge([
'colors' => json_encode($request->colors),
'text_sizes' => json_encode($request->text_sizes)
]), [
"name" => "required|string",
"colors" => "json",
"sizes" => "json"
]);
您需要传递一个JSON字符串,而不是JSON对象。这可以通过json\u encode
或json.stringify
实现
作为对您最后评论的答复:
您可以在前端应用程序中使用JSON.stringify
执行此操作,也可以使用prepareForValidation()实现表单请求
您可以在json属性上执行json\u encode()
。比如:
protected function prepareForValidation()
{
$this->merge([
'colors' => json_encode($this->colors),
'text_sizes' => json_encode($this->text_sizes)
]);
}
或者在您的情况下:
$validator = Validator::make($request->merge([
'colors' => json_encode($request->colors),
'text_sizes' => json_encode($request->text_sizes)
]), [
"name" => "required|string",
"colors" => "json",
"sizes" => "json"
]);
laravel有一种方便的方法来验证请求。请按照以下步骤为api发出您自己的请求和响应
1-php工匠制作:请求您的请求
然后像这样定制您的请求
laravel有一种方便的方法来验证请求。请按照以下步骤为api发出您自己的请求和响应
1-php工匠制作:请求您的请求
然后像这样定制您的请求
我找到了一个简单的解决方案,只需使用双引号表示json字符串,并转义json中的双引号:
{“name”:“Test”,“colors”:“{“Man\”:\“0000ff\”,“Second\”:\“FF0000\”,“size”:“{“titles\”:“20px\”}
这解决了我从rest发送json字符串的问题。我找到了一个简单的解决方案,只需使用双引号表示json字符串,并转义json中的双引号:
{“name”:“Test”,“colors”:“{“Man\”:\“0000ff\”,“Second\”:\“FF0000\”,“size”:“{“titles\”:“20px\”}
这解决了我从rest发送json字符串的问题。您传递的是json对象,而不是json字符串。因此,要使其工作,我认为您需要执行JSON.parse()
。所以你会得到类似于“\'colors\”:{\n\“Man\”:“\'0000ff\”,\n\“Second\”:“\'FF0000\”\n}”
我试过这样做:“colors:“{'Main':'0000ff','Secondary':'FF0000'”,但它不起作用。这不是一个有效的json字符串吗?不,我认为您需要使用反斜杠:“\'colors\':\'Man\':\“\'0000ff\”,“Second\”:\“\'FF0000\”)。PS我的意思当然是JSON.stringify()
,我明白了。那么,在验证JSON字段之前,如何仅对其进行字符串化?因为在我的例子中,我只希望有两个属性是JSON数据。@Tom请在线程中做出响应,以便我可以将我的帖子标记为已回答。谢谢。您传递的是一个json对象,而不是json字符串。因此,要使其工作,我认为您需要执行JSON.parse()
。所以你会得到类似于“\'colors\”:{\n\“Man\”:“\'0000ff\”,\n\“Second\”:“\'FF0000\”\n}”
我试过这样做:“colors:“{'Main':'0000ff','Secondary':'FF0000'”,但它不起作用。这不是一个有效的json字符串吗?不,我认为您需要使用反斜杠:“\'colors\':\'Man\':\“\'0000ff\”,“Second\”:\“\'FF0000\”)。PS我的意思当然是JSON.stringify()
,我明白了。那么,在验证JSON字段之前,如何仅对其进行字符串化?因为在我的例子中,我只希望有两个属性是JSON数据。@Tom请在线程中做出响应,以便我可以将我的帖子标记为已回答。谢谢。谢谢,但当我只想立即验证两个字段时,这似乎不切实际。我现在没有任何复杂的逻辑,所以我不需要做所有这些。谢谢你,但当我只想立即验证两个字段时,这似乎不切实际。我现在没有任何复杂的逻辑,所以我没有必要做所有这些。