ひとこと掲示板作成

パーフェクトPHPhttps://www.amazon.co.jp/dp/B00P0UDWQY/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1を読んでいると、6章で「ひとこと掲示板作成」を行うことになる。せっかくlaravelも同時に学んでいることだし、これをlaravelで作成しなおしてみた。

使用言語:PHP
使用フレームワーク:laravel

C:\xampp\htdocs\laravelapp>php --version
PHP 7.1.9 (cli) (built: Aug 30 2017 18:37:35) ( ZTS MSVC14 (Visual C++ 2015) x86 )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
C:\xampp\htdocs\laravelapp>php artisan --version
Laravel Framework 5.5.12
OnelinebbsController.php

<?php
//パーフェクトPHP6章のlaravel版

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\RubihuriRequest;
use Validator;
use Illuminate\Support\Facades\DB;
use App\Http\Requests\OnelinebbsRequest;

class OnelinebbsController extends Controller
{
    public function bbs_index(Request $request)
    {
        $items = DB::table('bbs')->get();
        return view('layouts.bbs',['items'=>$items]); 
    }

    public function bbs_post(OnelinebbsRequest $request)
    {   
        /*
         bbs_postでは実際の画面表示はしない。画面遷移の処理である。
            最終的にリダイレクトして全体表示している。
        */
        date_default_timezone_set('Asia/Tokyo');
        
        $param = [
            'name' => $request->name,
            'comment' => $request->comment,
            'date' => date("Y/m/d H:i:s"),
        ];
        DB::table('bbs')->insert($param);
        // DB::table('bbs')->insert($param); 
        return redirect('/onelinebbs');
    }
}
bbs.blade.php

<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>ひとこと掲示板</title>
    </head>
    <body>
        <h1>ひとこと掲示板</h1>

        @if(count($errors)>0)
        <p>入力に問題があります。再入力してください。</p>
        @endif

        <table>
            <form action="/onelinebbs2" method="post">
                {{ csrf_field() }}
                @if($errors->has('name'))
                    <tr><th>ERROR</th><td>{{$errors->first('name')}}</td></tr>
                @endif

                <tr><th align="left" valign="middle">名前:</th><td><input type="text" name="name" value="{{old('name')}}"></td></tr>

                @if($errors->has('comment'))
                    <tr><th>ERROR</th><td>{{$errors->first('comment')}}</td></tr>
                @endif

                <tr><th align="left" valign="middle">ひとこと:</th><td><input type="text" name="comment" size="60" value="{{old('comment')}}"></td></tr>
                <tr><th></th><td><input type="submit" name="submit" value="送信"></td></tr>
            </form>
        </table>
        
        <table border="0">
            @foreach ($items as $item)
                <ul>  
                    <li>
                        {{$item->name}}:{{$item->comment}}-{{$item->date}}
                    </li>
                </ul>
            @endforeach
        </table>


    </body>
</html>
OnelinebbsRequest.php

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class OnelinebbsRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        if ($this->path() == 'onelinebbs2') 
        {
            return true;
        }else{
            return false;    
        }
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required',
            'comment' => 'required',
        ];
    }

    public function messages()
    {
        return [
            'name.required' => '名前は必ず入力してください。',
            'comment.required' => 'コメントが必要です。',
        ];
    }
}
web.php

Route::get('onelinebbs','OnelinebbsController@bbs_index');
Route::post('onelinebbs','OnelinebbsController@bbs_post');

実行結果

f:id:ma_swan:20190227222345p:plain
通常処理
f:id:ma_swan:20190227222204p:plain
バリデーション処理