Php 为什么阵列到字符串的转换由Lumen承担?
我对Lumen的POST请求中包含以下JSON负载:Php 为什么阵列到字符串的转换由Lumen承担?,php,json,laravel,lumen,Php,Json,Laravel,Lumen,我对Lumen的POST请求中包含以下JSON负载: { "array": [ {"title":"my blogADD","description":"myblogdescriptionADD","status":1}, {"title":"my blogUPDATEDADD","description":"myblogdescriptionUPDATEDADD","status":1}, {"title":"my blog33ADD",
{ "array":
[
{"title":"my blogADD","description":"myblogdescriptionADD","status":1},
{"title":"my blogUPDATEDADD","description":"myblogdescriptionUPDATEDADD","status":1},
{"title":"my blog33ADD","description":"myblogdescription33ADD","status":1}
]
}
POST调用我的控制器中的以下端点:
$this->validate($request, [
'array' => 'present|array',
'array.*.title' => 'required',
'array.*.description' => 'required'
]);
为完整起见,以下是my ArticleController.php的完整代码:
<?php
namespace App\Http\Controllers;
use App\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
//
public function showAllArticles(){
return response()->json(Article::get(['title', 'description', 'status'])); // ::get([]) spezifiziert die zu referenzierenden Attribute
// ::all() referenziert alle Attribute einer Tabelle/Relation
}
public function showOneArticle($id){
return response()->json(Article::find($id));
}
public function create(Request $request){
$this->validate($request, [
'array' => 'present|array',
'array.*.title' => 'required',
'array.*.description' => 'required'
]);
//dd($request->all());
/*
$this->validate($request, [
'title' => 'required',
'description' => 'required'
]);*/
//insert record
//$article = Article::create($request->all());
Article::insert($request->all());
//return response()->json($article, 201);
}
public function update($id, Request $request){
$this->validate($request, [
'title' => 'required',
'description' => 'required'
]);
$article = Article::findOrFail($id);
$article->update($request->all());
return response()->json($article, 200);
}
public function delete($id, Request $request){
Article::findOrFail($id)->delete();
return response('Deleted Successfully', 200);
}
public function resetRecords(Request $request){
Article::where('id', '>', 2)->delete();
}
}
我从Michael Aaron Wilson的SO答案中获得了我的代码和JSON请求的上述语法:
这不是公认的答案,但它似乎比公认的答案更适合我的问题。
但也许我错了,我对lumen还很陌生,在使用lumen helper->validate()时,我目前面临的问题最多
也许你们中的某个人可以告诉我,所引用问题中提出的解决方案是否已经错了,或者我的代码是否错了,或者我的JSON对象数组是否错了
编辑:
调试my$请求会产生以下结果:
^ Laravel\Lumen\Http\Request {#49
#json: Symfony\Component\HttpFoundation\ParameterBag {#41
#parameters: array:1 [
"array" => array:3 [
0 => array:3 [
"title" => "my blogADD"
"description" => "myblogdescriptionADD"
"status" => 1
]
1 => array:3 [
"title" => "my blogUPDATEDADD"
"description" => "myblogdescriptionUPDATEDADD"
"status" => 1
]
2 => array:3 [
"title" => "my blog33ADD"
"description" => "myblogdescription33ADD"
"status" => 1
]
]
]
}
#convertedFiles: null
#userResolver: Closure($guard = null) {#32
class: "Laravel\Lumen\Application"
this: Laravel\Lumen\Application {#3 …}
}
#routeResolver: Closure() {#38
class: "Laravel\Lumen\Application"
this: Laravel\Lumen\Application {#3 …}
}
+attributes: Symfony\Component\HttpFoundation\ParameterBag {#51
#parameters: []
}
+request: Symfony\Component\HttpFoundation\ParameterBag {#41}
+query: Symfony\Component\HttpFoundation\ParameterBag {#57
#parameters: []
}
+server: Symfony\Component\HttpFoundation\ServerBag {#53
#parameters: array:42 [
"DOCUMENT_ROOT" => "E:\LumenTut\firstTut\public"
"REMOTE_ADDR" => "127.0.0.1"
"REMOTE_PORT" => "55949"
"SERVER_SOFTWARE" => "PHP 7.3.10 Development Server"
"SERVER_PROTOCOL" => "HTTP/1.1"
"SERVER_NAME" => "localhost"
"SERVER_PORT" => "8080"
"REQUEST_URI" => "/api/articles"
"REQUEST_METHOD" => "POST"
"SCRIPT_NAME" => "/index.php"
"SCRIPT_FILENAME" => "E:\LumenTut\firstTut\public\index.php"
"PATH_INFO" => "/api/articles"
"PHP_SELF" => "/index.php/api/articles"
"HTTP_HOST" => "localhost:8080"
"HTTP_USER_AGENT" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
"HTTP_ACCEPT" => "*/*"
"HTTP_ACCEPT_LANGUAGE" => "en-US,en;q=0.5"
"HTTP_ACCEPT_ENCODING" => "gzip, deflate"
"CONTENT_TYPE" => "application/json"
"HTTP_CONTENT_TYPE" => "application/json"
"CONTENT_LENGTH" => "281"
"HTTP_CONTENT_LENGTH" => "281"
"HTTP_DNT" => "1"
"HTTP_CONNECTION" => "keep-alive"
"REQUEST_TIME_FLOAT" => 1575013707.0195
"REQUEST_TIME" => 1575013707
"APP_NAME" => "Lumen"
"APP_ENV" => "local"
"APP_KEY" => ""
"APP_DEBUG" => "true"
"APP_URL" => "http://localhost"
"APP_TIMEZONE" => "UTC"
"LOG_CHANNEL" => "stack"
"LOG_SLACK_WEBHOOK_URL" => ""
"DB_CONNECTION" => "mysql"
"DB_HOST" => "127.0.0.1"
"DB_PORT" => "3306"
"DB_DATABASE" => "firstTut"
"DB_USERNAME" => "root"
"DB_PASSWORD" => ""
"CACHE_DRIVER" => "file"
"QUEUE_CONNECTION" => "sync"
]
}
+files: Symfony\Component\HttpFoundation\FileBag {#54
#parameters: []
}
+cookies: Symfony\Component\HttpFoundation\ParameterBag {#52
#parameters: []
}
+headers: Symfony\Component\HttpFoundation\HeaderBag {#55
#headers: array:9 [
"host" => array:1 [
0 => "localhost:8080"
]
"user-agent" => array:1 [
0 => "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
]
"accept" => array:1 [
0 => "*/*"
]
"accept-language" => array:1 [
0 => "en-US,en;q=0.5"
]
"accept-encoding" => array:1 [
0 => "gzip, deflate"
]
"content-type" => array:1 [
0 => "application/json"
]
"content-length" => array:1 [
0 => "281"
]
"dnt" => array:1 [
0 => "1"
]
"connection" => array:1 [
0 => "keep-alive"
]
]
#cacheControl: []
}
#content: """
{ "array":
[
{"title":"my blogADD","description":"myblogdescriptionADD","status":1},
{"title":"my blogUPDATEDADD","description":"myblogdescriptionUPDATEDADD","status":1},
{"title":"my blog33ADD","description":"myblogdescription33ADD","status":1}
]
}
"""
#languages: null
#charsets: null
#encodings: null
#acceptableContentTypes: null
#pathInfo: "/api/articles"
#requestUri: "/api/articles"
#baseUrl: ""
#basePath: null
#method: "POST"
#format: null
#session: null
#locale: null
#defaultLocale: "en"
-preferredFormat: null
-isHostValid: true
-isForwardedValid: true
basePath: ""
format: "html"
}
您的问题是您的json将如何到达您的验证器。粘贴
dd($request)
此处(在其中找到您的json并粘贴)您的请求的状态字段中有一个数组,因此您试图在表的“状态”列中插入一个数组。我想这就是问题所在。@Hamid我在我的帖子中编辑了$request调试的结果。@Porloscerosψ我不明白你的意思,这里的状态不是数组,它是用JSON编写的对象的属性。有什么问题吗?@baryon123你在一个数组中有一个数组。在您的问题中添加以下代码dd($request->all())
的结果(可能您在这一步中找到了答案)
^ Laravel\Lumen\Http\Request {#49
#json: Symfony\Component\HttpFoundation\ParameterBag {#41
#parameters: array:1 [
"array" => array:3 [
0 => array:3 [
"title" => "my blogADD"
"description" => "myblogdescriptionADD"
"status" => 1
]
1 => array:3 [
"title" => "my blogUPDATEDADD"
"description" => "myblogdescriptionUPDATEDADD"
"status" => 1
]
2 => array:3 [
"title" => "my blog33ADD"
"description" => "myblogdescription33ADD"
"status" => 1
]
]
]
}
#convertedFiles: null
#userResolver: Closure($guard = null) {#32
class: "Laravel\Lumen\Application"
this: Laravel\Lumen\Application {#3 …}
}
#routeResolver: Closure() {#38
class: "Laravel\Lumen\Application"
this: Laravel\Lumen\Application {#3 …}
}
+attributes: Symfony\Component\HttpFoundation\ParameterBag {#51
#parameters: []
}
+request: Symfony\Component\HttpFoundation\ParameterBag {#41}
+query: Symfony\Component\HttpFoundation\ParameterBag {#57
#parameters: []
}
+server: Symfony\Component\HttpFoundation\ServerBag {#53
#parameters: array:42 [
"DOCUMENT_ROOT" => "E:\LumenTut\firstTut\public"
"REMOTE_ADDR" => "127.0.0.1"
"REMOTE_PORT" => "55949"
"SERVER_SOFTWARE" => "PHP 7.3.10 Development Server"
"SERVER_PROTOCOL" => "HTTP/1.1"
"SERVER_NAME" => "localhost"
"SERVER_PORT" => "8080"
"REQUEST_URI" => "/api/articles"
"REQUEST_METHOD" => "POST"
"SCRIPT_NAME" => "/index.php"
"SCRIPT_FILENAME" => "E:\LumenTut\firstTut\public\index.php"
"PATH_INFO" => "/api/articles"
"PHP_SELF" => "/index.php/api/articles"
"HTTP_HOST" => "localhost:8080"
"HTTP_USER_AGENT" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
"HTTP_ACCEPT" => "*/*"
"HTTP_ACCEPT_LANGUAGE" => "en-US,en;q=0.5"
"HTTP_ACCEPT_ENCODING" => "gzip, deflate"
"CONTENT_TYPE" => "application/json"
"HTTP_CONTENT_TYPE" => "application/json"
"CONTENT_LENGTH" => "281"
"HTTP_CONTENT_LENGTH" => "281"
"HTTP_DNT" => "1"
"HTTP_CONNECTION" => "keep-alive"
"REQUEST_TIME_FLOAT" => 1575013707.0195
"REQUEST_TIME" => 1575013707
"APP_NAME" => "Lumen"
"APP_ENV" => "local"
"APP_KEY" => ""
"APP_DEBUG" => "true"
"APP_URL" => "http://localhost"
"APP_TIMEZONE" => "UTC"
"LOG_CHANNEL" => "stack"
"LOG_SLACK_WEBHOOK_URL" => ""
"DB_CONNECTION" => "mysql"
"DB_HOST" => "127.0.0.1"
"DB_PORT" => "3306"
"DB_DATABASE" => "firstTut"
"DB_USERNAME" => "root"
"DB_PASSWORD" => ""
"CACHE_DRIVER" => "file"
"QUEUE_CONNECTION" => "sync"
]
}
+files: Symfony\Component\HttpFoundation\FileBag {#54
#parameters: []
}
+cookies: Symfony\Component\HttpFoundation\ParameterBag {#52
#parameters: []
}
+headers: Symfony\Component\HttpFoundation\HeaderBag {#55
#headers: array:9 [
"host" => array:1 [
0 => "localhost:8080"
]
"user-agent" => array:1 [
0 => "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
]
"accept" => array:1 [
0 => "*/*"
]
"accept-language" => array:1 [
0 => "en-US,en;q=0.5"
]
"accept-encoding" => array:1 [
0 => "gzip, deflate"
]
"content-type" => array:1 [
0 => "application/json"
]
"content-length" => array:1 [
0 => "281"
]
"dnt" => array:1 [
0 => "1"
]
"connection" => array:1 [
0 => "keep-alive"
]
]
#cacheControl: []
}
#content: """
{ "array":
[
{"title":"my blogADD","description":"myblogdescriptionADD","status":1},
{"title":"my blogUPDATEDADD","description":"myblogdescriptionUPDATEDADD","status":1},
{"title":"my blog33ADD","description":"myblogdescription33ADD","status":1}
]
}
"""
#languages: null
#charsets: null
#encodings: null
#acceptableContentTypes: null
#pathInfo: "/api/articles"
#requestUri: "/api/articles"
#baseUrl: ""
#basePath: null
#method: "POST"
#format: null
#session: null
#locale: null
#defaultLocale: "en"
-preferredFormat: null
-isHostValid: true
-isForwardedValid: true
basePath: ""
format: "html"
}