Laravel CRUDを実装する

2020年1月30日

PHP

下記イラストのような画面遷移をもつCRUD(Create/Read/Update/Delete)アプリケーションを作成します。

 

 

 

 

booksテーブルを作成し、titleとauthorを新規登録/編集し、また削除する機能を作成します。本記事ではMySQLを利用し、あらかじめsample01データベースを用意しておきます。.envに適当な値を設定します。

 

.env

 

データベース接続に関しては下記のページもご覧下さい。

MySQLと接続し一覧表示 [DBクラス]

 

 

モデル、コントローラー、ビューの順番に作成し、最後にバリデーションの機能を追加します。

 

 

モデルの作成


 

まずモデルとマイグレーションファイルを作成します。

 

 

モデルとマイグレーション自体の詳しい説明についてはこちら

Eloquentでテーブルの一覧表示

 

マイグレーション(migration)の基本

 

 

以上でbooksテーブルに対応したモデル(app/Book.php)とマイグレーションファイルが生成されるので、それぞれ下記のように追記します(ハイライト部分)。

 

app/Book.php

fillableでデータ登録の際の複数代入のホワイトリストを追記しておきます。これを設定しないと後に作成するコントローラーの下記の箇所でエラーとなります。

 

database/migrations/ディレクトリ以下にタイムスタンプ付きのファイルが生成されるので編集します。

 

2020_01_29_005709_create_books_table.php

 

マイグレーションを実行します。

 

完了するとbooksテーブルが生成されているのが確認できます。

 

 

コントローラーの作成


 

次に–resourceを付けてコントローラーファイルを作成します。

 

web.phpに下記コードを追記します。

routes/web.php

 

設定されているルート情報を確認します。

 

–resourceを付けることにより作成したコントローラーファイルに各アクションである index() / create() / store() / show() / edit() / update() / destroy() があらかじめ記述されているのが確認できます。それぞれ下記のように追記します(ハイライト部分)。

 

app/Http/Controllers/BookController.php

40行目

フラッシュデータとしてセッションへメッセージを格納しています。

 

フラッシュデータについてはセッションをご覧下さい。

セッション(session)を利用する

 

 

 

ビューの作成


 

bookディレクトリを作成し、一覧/新規作成/詳細/編集画面としての各ビュー(テンプレート)を作成します。

 

一覧画面

resources/views/book/index.blade.php

BookController.phpでの各メソッドとルート情報を考慮して記述していきます。例えば18行目においてbook.showを指定しidをGETメソッドで渡すことによって詳細画面へと遷移します。また19行目ではbook.editを指定しidをGETメソッドで渡しています。21〜25行目においては、HTMLがDELETEメソッドをサポートしていないので@method(‘DELETE’)を付ける必要があります。

 

4〜6行目

セッションへ格納したメッセージを取得し表示させています。

 

 

新規作成画面

resources/views/book/create.blade.php

 

 

詳細画面

resources/views/book/show.blade.php

 

 

編集画面

resources/views/book/edit.blade.php

book.updateに対してPUTメソッドでidを渡す必要がありますが、HTMLがPUTメソッドをサポートしていないので削除の時と同じように、今度は@method(‘PUT’)を記述しています。

 

 

以上でCRUD機能を持つ基本的なアプリケーションが作成できました。

 

 

バリデーション


 

最後にフォームリクエストによるバリデーション機能を、フォーム画面を持つ新規作成と編集画面に対して追加しておきます。上述してきた内容にバリデーション機能を実装します。

 

バリデーション自体の詳しい説明については下記ページをご覧下さい。

フォームリクエストでバリデーションを実装する

 

 

フォームリクエストクラスを作成し、生成されたファイルに下記のように追記/編集します(ハイライト部分)。

 

app/Http/Requests/StoreBook.php

 

 

BookController.phpコントローラーを下記のように追記/編集します。

 

作成したフォームリクエストクラスを読み取ります。

 

バリデーションが必要なstore()とupdate()の引数のRequestをStoreBookに変更します。

 

 

ビュー(テンプレート)側にエラーメッセージ表示部分を追記します。

 

新規作成画面

resources/views/book/create.blade.php

 

編集画面

resources/views/book/edit.blade.php

 

 

以上でバリデーションの機能が追加されました。

 

 

関連ページ

REST API を実装する

 

 

 

LINEで送る
Pocket

定番本
定期
Copyright © 2020 思考の葉 All Rights Reserved.  プライバシーポリシー