【初心者向け】Laravelで投稿機能を作る方法(掲示板的なやつ)
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
今回は、PHP のフレームワークである 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');
② コマンドを打って、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/日付_create_posts_table.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 からお願いします。