PHP

スポンサー広告

Laravel5.4 MySQLと接続その4

2017/08/13

FORMの入力内容をDBに書き込む

Laravel5.4 MySQLと接続その3 の続きです。laravelをインストールしてDBからデータを取得できるようになりましたので入力フォームからデータを取得してDB に書き込もうと思います。

まずはフォームを作成します。

インストールファルダのresources\viewsの中に任意の名前のファイル(form.blade.php)を作成します。

form.blade.php

<!doctype html>
<html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="">
        <title>入力フォーム</title>
    </head>
    <body>
    	<form action="" method="post">
    	 {{ csrf_field() }}
    	<p>タイトル<input type="text" name="title"</p>
    	<p>要約<input type="text" name="descript"</p>
    	<p>カテゴリ<input type="text" name="category"</p>
    	<p>内容<input type="text" name="comment"</p>
    	<p><input type="submit" value="登録"></p>
    	</form>
    </body>
</html>

form要素の下の行の {{ csrf_field() }}はLaravel 5.4 CSRF保護によればクロス・サイト・リクエスト・フォージェリ攻撃を防止する目的のもので必須のものと思われます。自らランダムトークンをセッションに保存しなくてもいいよってことですね。 {{ csrf_field() }}がないとエラーで動作しません。

作成したフォームを表示するようにweb.phpに追記します。routes/web.phpに

Route::get('form',function(){
	return view('/form');
});

を追記します。public/formでアクセスされた時にform.blade.phpを表示させます。次に送信ボタンを押したときの動作ですが通常form要素のaction属性に遷移しますが、今回action属性は空白です。web.phpにformからpostでデータを送信された時の遷移先を記入します。

Route::post('/form','ArticleController@store');

formページにpostでアクセスされた時はArticleControllerのstoreメソッドを実行してねという意味ですね。

現段階までに、app\Http\controllersの中にArticleController.phpを作っていますのでそれにstoreメソッドを追記します。

ArticleController.php

public function store(Request $request){
    $article= new Article();
    $article->title = $request->title;
    $article->descript = $request->descript;
    $article->category = $request->category;
    $article->comment = $request->comment;
    $article->save();
}

まずはメソッド名であるstoreは任意のものでも構いませんが、 リソースコントローラ

リソースコントローラーにより処理されるアクション

動詞 URI アクション ルート名
GET /photos index photos.index
GET /photos/create create photos.create
POST /photos store photos.store
GET /photos/{photo} show photos.show
GET /photos/{photo}/edit edit photos.edit
PUT/PATCH /photos/{photo} update photos.update
DELETE /photos/{photo} destroy photos.destroy

となっているようですのでstoreに倣っておきます。Request $requestはPOSTで送られてきたデータが入っています。php artisanのmakeでコントローラーを作成すると自動でuse Illuminate\Http\Request;が記述されているはずですので唐突に見えますが、Request型の変数$requestからformのデータが取得できます。$_POSTみたいなものでしょうか。

$article= new Article();でArticleクラスのオブジェクトを新しく作成します。use App\Article;をコントローラーに記述しておきます。これはデータベース接続のモデルの事ですね。このオブジェクトはDBのarticleテーブルのカラム名と同じプロパティを持っているのでそのプロパティにフォームから入力された値を代入してあげます。ほぼ毎回フォームのnameとテーブルのカラムは一致すると思いますので$article->title = $request->title;のような書き方になると思います。

最後に代入を終えたオブジェクトにsaveメソッドを実行することでDBにデータを書き込むことが可能です。

 

rssfeed
コメント
2018年04月21日 06時22分
kzkdhwx さん
9XiVxW <a href="http://isncsmhravmv.com/">isncsmhravmv</a>, [url=http://kvmfptvettgi.com/]kvmfptvettgi[/url], [link=http://wvoglijjxcwv.com/]wvoglijjxcwv[/link], http://lzgzbxxixhye.com/

コメントよろしくお願いします。

お名前
コメント