Laravel/BBS

DB
database/migrations/create_articles_table.php
public function up()
{
    Schema::create('articles', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('user_name');
		$table->string('content');
        $table->timestamps();
    });
}

Model
app/Article.php
amespace App;
use Illuminate\Database\Eloquent\Model;
class Article extends Model{}


View
routes/web.php
Route::get('/', function () {
    return redirect('/articles');
});
Route::get('/articles', 'ArticleController@index')->name('article.list');
Route::get('/article/new', 'ArticleController@create')->name('article.new');
Route::post('/article', 'ArticleController@store')->name('article.store');
Route::get('/article/edit/{id}', 'ArticleController@edit')->name('article.edit');
Route::post('/article/update/{id}', 'ArticleController@update')->name('article.update');
Route::get('/article/{id}', 'ArticleController@show')->name('article.show');
Route::delete('/article/{id}', 'ArticleController@destroy')->name('article.delete');

resouces/views/layout.blade.php
!DOCTYPE html>
html>
    head>
        meta charset='utf-8' />
        meta name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no' />
		link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css' />
        title>paiza bbs/title>
        style>body {padding: 10px;}/style>
    /head>
    body>
        @include('nav')
        div class='container'>
            @yield('content')
        /div>
    /body>
/html>

resouces/views/index.blade.php
@extends('layout')
@section('content')
    h1>laravel BBS/h1>
    p>{{ $message }}/p>
    p>a href="{{ route('article.new') }}" class='btn btn-outline-primary'>新規投稿/a>/p>
    @include('search')

    table class='table table-striped table-hover'>
        @foreach ($articles as $article)
            tr>
                td>a href='{{ route("article.show", ["id" =>  $article->id]) }}'>
                    {{ $article->content }}
                /a>/td>
            
        @endforeach
    /table>
@endsection

resouces/views/new.blade.php
@extends('layout')
@section('content')
    h1>laravel bbs/h1>
    p>{{ $message }}/p>
    {{ Form::open(['route' => 'article.store']) }}
        div class='form-group'>
            {{ Form::label('content', 'Content:') }}
            {{ Form::text('content', null) }}
        /div>
        div class='form-group'>
            {{ Form::label('user_name', 'Name:') }}
            {{ Form::text('user_name', null) }}
        /div>
        div class="form-group">
            {{ Form::submit('作成する', ['class' => 'btn btn-primary']) }}
            a href={{ route('article.list') }}>一覧に戻る/a>
        /div>
    {{ Form::close() }}
@endsection

resouces/views/search.blade.php
{{ Form::open(['method' => 'get']) }}
    {{ csrf_field() }}
    div class='form-group'>
        {{ Form::label('keyword', 'キーワード:') }}
        {{ Form::text('keyword', null, ['class' => 'form-control']) }}
    /div>
    div class='form-group'>
        {{ Form::submit('検索', ['class' => 'btn btn-outline-primary'])}}
        a href={{ route('article.list') }}>クリア/a>
    /div>
{{ Form::close() }}

resouces/views/show.blade.php
@extends('layout')
@section('content')
    h1>laravel bbs/h1>
    p>{{ $article->content }}/p>
    p>{{ $article->user_name }}/p>

    p>
        a href={{ route('article.list') }} class='btn btn-outline-primary'>一覧に戻る/a>
        a href={{ route('article.edit', ["id" =>  $article->id]) }} class='btn btn-outline-primary'>編集/a>
    /p>
    div>
        {{ Form::open(['method' => 'delete', 'route' => ['article.delete', $article->id]]) }}
            {{ Form::submit('削除', ['class' => 'btn btn-outline-secondary']) }}
        {{ Form::close() }}
    /div>
@endsection

resouces/views/edit.blade.php
@extends('layout')
@section('content')
    h1>laravel bbs/h1>
    p>{{ $message }}/p>
    {{ Form::model($article, ['route' => ['article.update', $article->id]]) }}
        div class='form-group'>
            {{ Form::label('content', 'Content:') }}
            {{ Form::text('content', null) }}
        /div>
        div class='form-group'>
            {{ Form::label('user_name', 'Name:') }}
            {{ Form::text('user_name', null) }}
        /div>
        div class="form-group">
            {{ Form::submit('保存する', ['class' => 'btn btn-primary']) }}
            a href={{ route('article.show', ['id' =>  $article->id]) }}>戻る/a>
        /div>
    {{ Form::close() }}
@endsection

resouces/views/nav.blade.php
nav class='navbar navbar-expand-md navbar-dark bg-dark fixed-top'>
    a class='navbar-brand' href={{ route('article.list') }}>laravel BBS/a>
/nav>


Controller
app/Http/Controllers/ArticleController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Article;
class ArticleController extends Controller
{
    public function index(Request $request)
    {
        if ($request->filled('keyword')) {
            $keyword = $request->input('keyword');
            $message = 'Welcome my BBS: ' . $keyword;
            $articles = Article::where('content', 'like', '%' . $keyword . '%')->get();
        } else {
            $message = 'Welcome my BBS';
            $articles = Article::all();
        }

        return view('index', ['message' => $message, 'articles' => $articles]);
    }

    public function create(Request $request)
    {
        $message = 'New article';
        return view('new', ['message' => $message]);
    }

    public function store(Request $request)
	{
	    $article = new Article;
	
	    $article->content = $request->content;
	    $article->user_name = $request->user_name;
	    $article->save();
	    return redirect()->route('article.list', ['id' => $article->id]);
	}

    public function show(Request $request, $id, Article $article)
	{
	    $message = 'This is your article ' . $id;
	    $article = Article::find($id);
	    return view('show', ['message' => $message, 'article' => $article]);
	}

    public function edit(Request $request, $id, Article $article)
    {
        $message = 'Edit your article ' . $id;
        $article = Article::find($id);
        return view('edit', ['message' => $message, 'article' => $article]);
    }

    public function update(Request $request, $id, Article $article)
	{
	    $article = Article::find($id);
	    $article->content = $request->content;
	    $article->user_name = $request->user_name;
	    $article->save();
	    return redirect()->route('article.list', ['id' => $article->id]);
	}

   	public function destroy(Request $request, $id, Article $article)
    {
        $article = Article::find($id);
        $article->delete();
        return redirect('/articles');
    }
}