【3】 Posts を表示させる

■ データベースを作成しよう

の続き…。

 routes/web.php を編集(追加)。

Route::resource(‘posts’, ‘PostController’);

if (env(‘APP_ENV’) === ‘local’) {
URL::forceScheme(‘https’);
}

ルーティングは
php artisan route:list
コマンドで確認☆

ビューの作成

app/Http/Controllers/PostController.php
の index アクションを以下のように修正

public function index()
{
     return view('posts.index');   ← 追加!!
}

resources/views に posts ディレクトリを作成

posts ディレクトリの中に
index.blade.php
を作成

ローカルサーバーを起動
Visual Studio Code のターミナルで
下記のコマンドを実行。

php artisan serve --port=8080

ブラウザで
http://127.0.0.1/アプリケーション名/public/posts
にアクセス。

ブラウザに「 Posts 」と表示されていれば OK☆

ちょっと 休憩。

app/Http/Controllers/PostController.php
の create アクションを以下のように編集

public function create()
{
    return view('posts.create');
}

resources/views/posts/create.blade.php
を作成

<form method="POST" action="/posts">
    {{ csrf_field() }}
    <input type="text" name="title">
    <input type="text" name="content">
    <input type="submit">
</form>

app/Http/Controllers/PostController.php
の store アクションを以下のように変更

    public function store(Request $request)
    {

        $post = new Post();
        $post->title = $request->input('title');
        $post->content = $request->input('content');
        $post->save();

        return redirect()->route('posts.show', ['id' => $post->id])->with('message', 'Post was successfully created.');

    }

■ 個別の詳細ページを作成

app/Http/Controllers/PostController.php
の show アクションを以下のように変更

public function show(Post $post)
{
    return view('posts.show', compact('post'));
}

resources/views/posts/show.blade.php
を以下のように作成

    @if (session('message'))
        {{ session('message') }}
    @endif

    {{ $post->title }}
    {{ $post->content }}

■ 作成した投稿一覧を作成

app/Http/Controllers/PostController.php
の index アクションを以下のように変更

    public function index()
    {

        $posts = Post::all();
        return view('posts.index', compact('posts'));

    }

resources/views/posts/index.blade.php
で受け取った $post を @foreach で展開

<h1>Posts</h1>

@foreach($posts as $post)
    <a href="/posts/{{ $post->id }}">{{ $post->title }}</a>
@endforeach

<a href="/posts/create">New Post</a>

■ 各投稿の編集ページ作成

resources/views/posts/index.blade.php
に /posts/:id/edit へのリンクを作成

<h1>Posts</h1>

@foreach($posts as $post)
    <a href="/posts/{{ $post->id }}">{{ $post->title }}</a>
    <a href="/posts/{{ $post->id }}/edit">Edit</a>
@endforeach

<a href="/posts/create">New Post</a>

各投稿の閲覧ページからも編集画面へ移動できるように
resources/views/posts/show.blade.php
にもリンクを作成

    @if (session('message'))
        {{ session('message') }}
    @endif

    {{ $post->title }}
    {{ $post->content }} 

    <a href="/posts/{{ $post->id }}/edit">Edit</a>

app/Http/Controllers/PostController.php
の edit アクションを編集

    public function edit(Post $post)
    {
         return view('posts.edit', compact('post'));
    }

ビューを作成する。
resources/views/posts/edit.blade.php

    <form method="POST" action="/posts/{{ $post->id }}">
        {{ csrf_field() }}
        <input type="hidden" name="_method" value="PUT">
        <input type="text" name="title" value="{{ $post->title }}">
        <input type="text" name="content" value="{{ $post->content }}">
        <input type="submit">
    </form>

app/Http/Controllers/PostController.php
の update アクションを以下のように実装

    public function update(Request $request, Post $post)
    {

        $post->title = $request->input('title');
        $post->content = $request->input('content');
        $post->save();

        return redirect()->route('posts.show', ['id' => $post->id])->with('message', 'Post was successfully updated.');

    }

■ 投稿した内容を削除する ( 削除機能の実装 )

resources/views/posts/index.blade.php
に投稿を削除するためのリンクを作成

<h1>Posts</h1>

@foreach($posts as $post)
    <a href="/posts/{{ $post->id }}">{{ $post->title }}</a>
    <a href="/posts/{{ $post->id }}/edit">Edit</a>

    <form action="/posts/{{ $post->id }}" method="POST" onsubmit="if(confirm('Delete? Are you sure?')) { return true } else {return false };">
        <input type="hidden" name="_method" value="DELETE">
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
        <button type="submit">Delete</button>
    </form>

@endforeach

<a href="/posts/create">New Post</a> 

app/Http/Controllers/PostController.php
の destroy アクションで投稿を削除するように修正

    public function destroy(Post $post)
    {

        $post->delete();
        return redirect()->route('posts.index');

    }

ターミナルに、下記コマンドを入力。

php artisan serve --port=8080

( ローカルサーバーを起動 )

ブラウザで表示 ↓
http://IPアドレス/posts

Posts の下に「 New Post 」のリンクが表示されれば、
第一段階は、OK☆

次に、「 New Post 」のリンク をクリック。
テキストフィールド(2つ)と、
[ 送信 ] ボタンが表示されれば、OK☆

■ GitHub(ギットハブ) に保存。

Visual Studio Code のターミナルに
一行ずつ 下記のコマンドをコピペ

git add .
git commit -m “posts commit”
git push -u origin main

おつかれさま でした~☆

おつかれさま でした。

次は 。。。

【4】 ヘッダーとフッターの追加

Follow me!