Laravel

【初心者向け】Laravelで投稿機能を作る方法(掲示板的なやつ)

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

今回は、PHP のフレームワークである Laravel で 投稿機能を作っていきたいと思います。

掲示板を作っていきましょう。

⇨ Laravel 記事の目次はこちら

Laravel の学習方法でオススメの流れ

環境

MacOS

Laravel6

どんな機能を作るのか

Laravel で掲示板のようなものを作ってみたいと思います。

掲示板には、「タイトル」「名前」「本文」の3つだけを保存していきます。

投稿機能(フォーム)の表示部分を作成する

まず最初にフォームの送信するための input やボタンを作っていきます。

① まず最初に、web.php にルーティングを追加します。

/routes/web.php

//表示用
Route::get('/post','PostController@create')->name('post.create');
//投稿を押した時
Route::post('/post','PostController@store')->name('post.store');

※Laravel の最新バージョンではこの web.php の記述が少し変わっています。

Laravel8 では、下記のような書き方になります。

Route::get('/post', [PostController::class, 'create'])->name('post.create');
Route::post('/post', [PostController::class, 'store'])->name('post.store');

⇨Laravel のルーティングの基本的な書き方の記事

② コマンドを打って、Post 用のコントローラーを作成します。

ターミナル

php artisan make:controller PostController

このコマンドにより、app/Http/Controllers/PostController が作成されました。

③ PostController に下記を追記します。

    public function create()
    {
        return view('post/create');
    }

この create という関数名は、web.php で指定した PostController@create の create と同じにする必要があります。

④ blade.php ファイルを作成します。

/resources/views/post/create.blade.php というファイルを作成してください。

@extends('layouts.app')

@section('content')
<div style="width:50%; margin: 0 auto; text-align:center;">
    <form action="{{ route('post.store') }}" method="POST">
        <div>
            名前:
            <input name="name" value="名前の入力欄"/>
        </div>
        <div>
            タイトル:
            <input name="title" placeholder="タイトルの入力欄"/>
        </div>
        <div>
            <textarea name="content" placeholder="内容の入力"></textarea>
        </div>
        <button>送信</button>
    </form>
</div>
@endsection

フォームの画像

特にスタイルをつけていなければこんな感じになっていると思います。

これで見た目は OK です。

データベースの posts テーブルを作成する

マイグレーションファイルを作成します。

コマンド

php artisan make:migration create_posts_table

このコマンドで、/databases/migrations/日付_createpoststable.php が作成されました。

このファイルに下記を追記します。

    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('title');
            $table->string('content');
            $table->timestamps();
        });
    }

コマンドを打って、データベースを作成します。

php artisan migrate

コマンドが通れば、データベースに posts テーブルが作成されます。

掲示板の投稿機能を完成させる

もう少しで、投稿機能が完成します!あと少し頑張りましょう。

① Post モデルを作成する。

Post 用のモデルを作成します。モデルがないと Laravel で投稿する機能を使えません。

php artisan make:model Post

このコマンドで app/Post.php が作成されました。

② PostController で投稿用の関数を作成する。

2箇所追記しているので、コメントの部分の2箇所を追加してみてください。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

//追記
use App\Post;

class PostController extends Controller
{
    public function create()
    {
        return view('post/create');
    }

    //追記
    public function store(Request $request)
    {
        $post = new Post;
        $post->name = $request->name;
        $post->title = $request->title;
        $post->content = $request->content;
        $post->save();
        return redirect()->route('post.create');
    }
}

以上で完成です。

実際に表示されているフォームから、名前、タイトル、内容を入力してみてください。

下の画像のようにデータが入りました!

データが入った画像

「バリデーション」については別の記事でやっていきたいと思います。

まとめ

いかがだったでしょうか!

フォームを作って、データを入力することができるようになりました。

あとはバリデーションだけ把握してしまえば、これとほぼ同じ感じで様々な入力(例えば EC の商品登録とか)が作れるようになると思います。

一番最初は、できるだけ少ないフォームにして、ひとつデータを作成できるように仕組みを作った後に、保存するカラムを増やしていくのが最初は早いと思います。

ありきたりな記事ではありますが、基本的な投稿機能で詰まっている人の助けになれば幸いです。

記事に対する、苦情・修正については Twitter の DM からお願いします。