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