Php 为什么阵列到字符串的转换由Lumen承担?

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",

我对Lumen的POST请求中包含以下JSON负载:

{ "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"
}