目的
- 投稿された内容の詳細を表示するページを作成する
実施環境
- 筆者の実施環境を記載する。
- ハードウェア環境
項目 | 情報 |
---|---|
OS | macOS Catalina(10.15.5) |
ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
プロセッサ | 2 GHz クアッドコアIntel Core i5 |
メモリ | 32 GB 3733 MHz LPDDR4 |
グラフィックス | Intel Iris Plus Graphics 1536 MB |
- ソフトウェア環境
項目 | 情報 | 備考 |
---|---|---|
PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールする |
Laravel バージョン | 8.6.0 | commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う |
MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする |
Node.jsバージョン | v12.14.1 | Homwbrewを用いてこちらの方法で導入→Mac HomebrewでNode.jsをインストールする |
前提条件
- 下記の記事の作業が完了していること。
前提情報
- 作成するアプリ名は「laravel8_crud」とする。
- 作成するMySQLのデータベース名は「laravel8_crud_DB」とする。
- 下記に今回の作業のあとのソースコードのリモートリポジトリのリンクを記載する。
- 投稿された内容の詳細ページのURLはhttp://127.0.0.1:8000/detail/投稿IDとする。
概要
- ルーティング情報の記載
- コントローラファイルの記載
- ビューファイルの作成と記載
- 確認
詳細
- ルーティングの記載
-
laravel8_crudディレクトリで下記コマンドを実行してルーティングファイルを開く。
$ vi routes/web.php
-
開いたファイルに下記の行を追記する。
laravel8_crud/routes/web.phpRoute::get('/detail/{content_id}', [ContentController::class, 'detail'])->name('detail');
-
追記後のルーティングファイルの内容を下記に記載する。
laravel8_crud/routes/web.php<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\ContentController; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Auth::routes(); Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); Route::get('/input', [ContentController::class, 'input'])->name('input'); Route::post('/save', [ContentController::class, 'save'])->name('save'); Route::get('/output', [ContentController::class, 'output'])->name('output'); // 下記を追記する Route::get('/detail/{content_id}', [ContentController::class, 'detail'])->name('detail');
-
- コントローラファイルの記載
-
laravel8_crudディレクトリで下記コマンドを実行して作成したコントローラファイルを開く。
$ vi app/Http/Controllers/ContentController.php
-
下記の内容をクラス内に追記する。
laravel8_crud/app/Http/Controllers/ContentController.phppublic function detail($content_id) { $content_get_query = Content::select('*'); $items = $content_get_query->find($content_id); return view('contents.detail', [ 'item' => $items, ]); }
-
追記後のコントローラファイルの内容を下記に記載する。
laravel8_crud/app/Http/Controllers/ContentController.php<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Content; class ContentController extends Controller { public function input() { return view('contents.input'); } public function save(Request $request) { $input_content = new Content(); $input_content->content = $request['content']; $input_content->save(); return redirect(route('output')); } public function output() { $contents_get_query = Content::select('*'); $items = $contents_get_query->get(); return view('contents.output', [ 'items' => $items, ]); } // 下記を追記する public function detail($content_id) { $content_get_query = Content::select('*'); $items = $content_get_query->find($content_id); return view('contents.detail', [ 'item' => $item, ]); } // 上記までを追記する }
-
- ビューファイルの作成と記載
-
laravel8_crudディレクトリで下記コマンドを実行してビューファイルを作成する。
vi resources/views/contents/detail.blade.php
-
作成して開いたビューファイルに下記の内容を記載する。
laravel8_crud/resources/views/contents/output.blade.php<h1>detail</h1> <p>投稿ID: {{$item['id']}}</p> <p>投稿内容: {{$item['content']}}</p> <p>投稿時間: {{$item['created_at']}}</p>
-
laravel8_credディレクトリで下記コマンドを実行して投稿内容の一覧ページのビューファイルを開く。
$ vi resources/views/contents/output.blade.php
-
開いたビューファイルの
<p>{{$item['content']}}</p>
の次の行に下記の内容を追記する。laravel8_crud/resources/views/contents/output.blade.php<a href="{{route('detail', ['content_id' => $item['id']])}}">詳細</a>
-
追記後のビューファイルの内容を下記に記載する。
laravel8_crud/resources/views/contents/output.blade.php<h1>output</h1> @foreach ($items as $item) <hr> <p>{{$item['content']}}</p> {{-- 下記を追記する --}} <a href="{{route('detail', ['content_id' => $item['id']])}}">詳細</a> @endforeach
-
- 確認
-
laravel8_crudディレクトリで下記コマンドを実行してローカルサーバを起動する。
$ php artisan serve
-
ブラウザで下記にアクセスする。
-
下記の様に投稿内容が表示され「詳細」のリンクがあることを確認する。(投稿内容は下記画像と一致しなくて良い)
-
「詳細」のリンクをクリックすると下記のページが開くこと、各種データが正常に表示されていることを確認する。問題無く表示されれば本記事の作業は完了である。
-