YuHo のブログ

Laravel, PHP, JavaScript

Laravel 5.6 でブログサイトを制作する #2

Post 用のリソース・コントローラーを作成する

php artisan make:controller PostController --resource

リソース・コントローラーを使用するルートを作成する

Route::resource('posts', 'PostController');

トップページのポストタイトルから各ポストページへのリンクを貼る

<div class="content">
    @foreach($posts as $post)
        <p><a href="{{ route('posts.show', $post->id) }}">{{ $post->title }}</a></p>
    @endforeach
</div>

ポスト・コントローラーのメソッドを編集する

<?php

namespace App\Http\Controllers;

use App\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('posts.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $post = new Post;
        
        $post->title = $request->input('title');
        $post->content = $request->input('content');
        
        $post->save();
        
        return redirect('/');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function show(Post $post)
    {
        return view('posts.show', ['post' => $post]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function edit(Post $post)
    {
        return view('posts.edit', ['post' => $post]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Post $post)
    {
        $post->title = $request->input('title');
        $post->content = $request->input('content');
        
        $post->save();
        
        return redirect('/');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function destroy(Post $post)
    {
        $post->delete();
        
        return redirect('/');
    }
}

ブレード・テンプレートを作成する

// posts/create.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <form>
                    <input id="title" name="title" type="text" />
                    <textarea id="content" name="content"></textarea>
                    <button type="submit">Store</button>
                </form>
            </div>
        </div>
    </div>
</div>
@endsection
// posts/edit.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <form>
                    <input id="title" name="title" type="text" value="{{ $post->title }}"/>
                    <textarea id="content" name="content">{{ $post->content }}</textarea>
                    <button type="submit">Store</button>
                </form>
            </div>
        </div>
    </div>
</div>
@endsection