1
2

More than 3 years have passed since last update.

Laravel8 CRUD処理を使った投稿アプリを作成する その7 投稿を表示するページの作成

Last updated at Posted at 2020-11-02

目的

  • 投稿された内容を削除するページを作成する

実施環境

  • 筆者の実施環境を記載する。
  • ハードウェア環境
項目 情報
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」とする。
  • 下記に今回の作業のあとのソースコードのリモートリポジトリのリンクを記載する。
  • 編集完了後のリダイレクトされるページは投稿一覧ページであるhttp://127.0.0.1:8000/outputとする。

概要

  1. ルーティング情報の記載
  2. コントローラファイルの記載
  3. ビューファイルの編集
  4. 確認

詳細

  1. ルーティングの記載

    1. laravel8_crudディレクトリで下記コマンドを実行してルーティングファイルを開く。

      $ vi routes/web.php 
      
    2. 開いたファイルに下記の行を追記する。

      laravel8_crud/routes/web.php
      Route::post('/delete/{content_id}', [ContentController::class, 'delete'])->name('delete');
      
    3. 追記後のルーティングファイルの内容を下記に記載する。

      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');
      Route::get('/edit/{content_id}', [ContentController::class, 'edit'])->name('edit');
      Route::post('/update', [ContentController::class, 'update'])->name('update');
      // 下記を追記する
      Route::post('/delete/{content_id}', [ContentController::class, 'delete'])->name('delete');
      
  2. コントローラファイルの記載

    1. laravel8_crudディレクトリで下記コマンドを実行して作成したコントローラファイルを開く。

      $ vi app/Http/Controllers/ContentController.php 
      
    2. 下記の内容をクラス内に追記する。

      laravel8_crud/app/Http/Controllers/ContentController.php
      public function delete(Request $request)
      {
          $contents_delete_query = Content::select('*');
          $contents_delete_query->find($request['id']);
          $contents_delete_query->delete();
      
          return redirect(route('output'));
      }
      
    3. 追記後のコントローラファイルの内容を下記に記載する。

      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('*');
              $item = $content_get_query->find($content_id);
      
              return view('contents.detail', [
                  'item' => $item,
              ]);
          }
      
          public function edit($content_id)
          {
              $content_get_query = Content::select('*');
              $item = $content_get_query->find($content_id);
      
              return view('contents.edit', [
                  'item' => $item,
              ]);
          }
      
          public function update(Request $request)
          {
              $content_get_query = Content::select('*');
              $content_info = $content_get_query->find($request['id']);
              $content_info->content = $request['content'];
              $content_info->save();
              return redirect(route('output'));
          }
      
          // 下記を追記する
          public function delete(Request $request)
          {
              $contents_delete_query = Content::select('*');
              $contents_delete_query->find($request['id']);
              $contents_delete_query->delete();
      
              return redirect(route('output'));
          }
          // 上記までを追記する
      }
      
  3. ビューファイルの編集

    1. laravel8_crudディレクトリで下記コマンドを実行してビューファイルを開く。

      $ vi resources/views/contents/detail.blade.php
      
    2. 下記のように編集する。

      laravel8_crud/resources/views/contents/detail.blade.php
      <h1>detail</h1>
      
      <p>投稿ID: {{$item['id']}}</p>
      <p>投稿内容: {{$item['content']}}</p>
      <p>投稿時間: {{$item['created_at']}}</p>
      <a href="{{route('edit', ['content_id' => $item['id']])}}">編集</a>
      {{-- 下記を追記する --}}
      <form action="{{route('delete')}}" method="post">
          @csrf
          <input type="hidden" name="id" value="{{$item['id']}}">
          <input type="submit" value="削除">
      </form>
      {{-- 上記までを追記する --}}
      
  4. 確認

    1. laravel8_crudディレクトリで下記コマンドを実行してローカルサーバを起動する。

      $ php artisan serve
      
    2. ブラウザで下記にアクセスする。

    3. 投稿一覧ページ内の「詳細」のリンクをクリックすると下記のページが開く「削除」のボタンが存在していることを確認する。(投稿内容や投稿IDは画像と一致しない可能性がある。)

      127_0_0_1_8000_detail_4.png

    4. 「削除」をクリックし投稿一覧ページにリダイレクトされ、投稿が削除されていることを確認できたら本記事の作業は完了である。

      127_0_0_1_8000_output.png

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2