LoginSignup
2
2

More than 3 years have passed since last update.

【Laravel】formで入力されたデータを保存しているstore メソッド

Last updated at Posted at 2020-02-16

初めてのLARAVEL 5.6 : (16) FORMの作成で勉強中。
formで入力されたデータを保存しているstoreメソッドについてまとめてみる。

以下のようなフォームがある。

create.blade.php
<form method="POST" action="/articles" accept-charset="UTF-8">
        @csrf
        <div class="form-group">
            <label for="title">Title:</label>
            <input class="form-control" name="title" type="text" id="title">
        </div>
        <div class="form-group">
            <label for="body">Body:</label>
            <textarea class="form-control" name="body" cols="50" rows="10" id="body"></textarea>
        </div>
        <div class="form-group">
            <label for="published_at">Publish On:</label>
            <input class="form-control" name="published_at" type="date" id="published_at">
        </div>    
        <div class="form-group">
            <input class="btn btn-primary form-control" type="submit" value="Add Article">
        </div>
</form>

以下のstoreメソッドは、\Request::all()でformからの入力を受け取り記事を作成している。

ArticlesController.php

...
public function store() 
    {
        $inputs = \Request::all();
        Article::create($inputs);
        return redirect('articles');
    }

ちなみに、dd($inputs);の結果は、以下

array:4 [▼
  "_token" => "D1zCIbRcEzYrqracQtyPbDFuKcGHLHcm2aNddRig"
  "title" => "入力したタイトル"
  "body" => "入力した記事"
  "published_at" => "2018-08-27"
]

以下のstoreメソッドは、メソッドの引数から Illuminate\Http\Request クラスのインスタンスを取得し、バリデーションを追加している。
メソッドの引数にタイプヒントでクラスを記述する方法である。
タイプヒンティングについては、PHPの型宣言(タイプヒンティング)がわかりやすい。

ArticlesController.php
public function store(Request $request) 
    {
        $rules = [
            'title' => 'required|min:3',
            'body' => 'required',
            'published_at' => 'required|date'
        ];
        $validated = $request->validate($rules);
        Article::create($validated);
        return redirect('articles');
    }

ちなみに、dd($request);の結果は、以下

Illuminate\Http\Request {#51 ▼
  #json: null
  #convertedFiles: null
  #userResolver: Closure($guard = null) {#31 ▶}
  #routeResolver: Closure() {#215 ▶}
  +attributes: Symfony\Component\HttpFoundation\ParameterBag {#53 ▶}
  +request: Symfony\Component\HttpFoundation\ParameterBag {#52 ▼
    #parameters: array:4 [▼
      "_token" => "FQjoGK4AbyJVCVmvaqWANu73Jpae5uq62fIHqW2h"
      "title" => "入力したタイトル"
      "body" => "入力した記事"
      "published_at" => "2018-08-27"
    ]
  }
  +query: Symfony\Component\HttpFoundation\ParameterBag {#59 ▶}
  +server: Symfony\Component\HttpFoundation\ServerBag {#55 ▶}
  +files: Symfony\Component\HttpFoundation\FileBag {#56 ▶}
  +cookies: Symfony\Component\HttpFoundation\ParameterBag {#54 ▶}
  +headers: Symfony\Component\HttpFoundation\HeaderBag {#57 ▶}
  #content: null
  #languages: null
  #charsets: null
  #encodings: null
  #acceptableContentTypes: null
  #pathInfo: "/articles"
  #requestUri: "/articles"
  #baseUrl: ""
  #basePath: null
  #method: "POST"
  #format: null
  #session: Illuminate\Session\Store {#234 ▶}
  #locale: null
  #defaultLocale: "en"
  -preferredFormat: null
  -isHostValid: true
  -isForwardedValid: true
  basePath: ""
  format: "html"
}

Article::create(変数);の変数は、配列でなければエラーが出るのだが、$validated = $request->validate($rules);で、なぜ配列が作成できるのかはいまいち分からない。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2