“ json()”中的第二个参数做什么(流明/ Laravel)?

问题描述 投票:0回答:1

所以我按照本教程进行操作,我在第27分钟https://www.youtube.com/watch?v=6Oxfb_HNY0U在那里,控制器的代码如下所示:

<?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){
      //dd($request); //for debugging whether the request is actually being processed


      $this->validate($request, [
        'title' => 'required',
        'description' => 'required'
      ]);


      //dd($request); //for debugging whether the specified fields are required
      //insert record

      $article = Article::create($request->all());
      return response()->json($article, 201);

    }
}

现在让我感到困惑的是以下行中的json()的参数:

return response()->json($article, 201);

我在laravel或lumen文档的第二个选项中找不到任何东西。到目前为止,我也无法通过此参数检测到任何影响。它仅出现在教程的Restlet Client的日志中,请参见屏幕截图。是港口吗???它确实出现在教程人员的HTTPS请求的历史记录日志中:https://imgur.com/To0Y6cJ

当我有以下几行时:

$this->validate($request, [
    'title' => 'required',
    'description' => 'required'
  ]);

未发表评论,那么我总是会收到以下答复:https://imgur.com/wTtZNrz

{
  "title": "The title field is required",
  "description": "The description field is required"
}

当我评论这些行时,出现此错误:https://textuploader.com/1oq3n

SQLSTATE [42S22]:找不到列:1054'字段列表'中的未知列'created_at'(SQL:插入articlesupdated_atcreated_at)值(2019-11-25 14:18: 33,2019-11-25 14:18:33))

我无法直接发布此标记,因为这样我的身体将超过最大字符数。因此,随时将其粘贴到an.html文件中,然后在本地显示。造成不便之处,敬请谅解...

我不太明白为什么会收到此错误,因为我没有在POST请求中引用这些列。

Article口才模型本身看起来像这样:

    <?php

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Article extends Model
    {

        protected $fillable = [
            'title', 'description', 'status'
        ];

    }

我在数据库端的表看起来像这样:

https://imgur.com/GpnNBIH

所以我真的看不出为什么这对我不起作用:(

php laravel lumen
1个回答
1
投票

这里有多个问题。

  1. 根据Laravel抛出的异常,您的数据库列created-at的拼写错误应为created_at

SQLSTATE [42S22]:找不到列:1054'字段列表'中的未知列'created_at'(SQL:插入articlesupdated_atcreated_at)值(2019-11-25 14:18: 33,2019-11-25 14:18:33))

  1. 您在json响应中出现错误“”标题字段为必填“”的原因是因为您的[[验证未通过。
尝试使用此方法:

$validatedData = $request->validate([ 'title' => 'required', 'description' => 'required', ]);

    您的POST请求的应用程序类型也可能是错误的,请尝试添加Content-Type标头并将其设置为application/json,如下所示>>
  1. curl ... -H "Content-Type: application/json"
    ->json($data, 201)就像其他人建议的那样是HTTP响应代码,如standard中所述。
© www.soinside.com 2019 - 2024. All rights reserved.