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

[初めてのLARAVEL 5.6 : (16) FORMの作成](https://laravel10.wordpress.com/2015/03/08/%e5%88%9d%e3%82%81%e3%81%a6%e3%81%aelaravel-5-16-form%e3%81%ae%e4%bd%9c%e6%88%90/)で勉強中。
formで入力されたデータを保存しているstoreメソッドについてまとめてみる。

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

```php: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からの入力を受け取り記事を作成している。

```php: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の型宣言(タイプヒンティング)](https://qiita.com/bunty/items/675dec8f3f357b23da5e)がわかりやすい。

```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);``で、なぜ配列が作成できるのかはいまいち分からない。