Laravelで簡単な掲示板を作成
魁!小野の塾 PHPで簡単なプログラムを作ってみようの巻 第1話 では、簡単な掲示板をPHPで作成しました。
今回は、同じような機能をLaravelで構築していきます。
機能的には、登録処理、削除処理、エラーチェックなどを実装していきます。
前回のソースは、200行程度の1ファイルだったのですが、今回はどのように書き方が変わるのか、見ていければ良いかと思います。
また、フレームワークを利用する機会は増えましたので、しっかり開発手順を覚えて頂きたいです。
Bootstrapを利用したサンプルを作成していますが、Laravelは Tailwind をCSSのフレームワークとして押しています。
Tailwindはコンポーネント開発を前提としたCSSフレームワークで、CSSを知っている人には使いやすいですが、Bootstrapを長年利用している人には、少し難易度が高いと思います。
対象のスキルレベル
- 魁!小野の塾 開発環境構築の巻 XAMPPインストール を読み環境構築済である
- Composerインストール(Windows) 開発環境構築の巻 魁!小野の塾 を読み環境構築済である
- Laravelの環境構築 開発環境構築の巻 魁!小野の塾 を読み環境構築済である
- 魁!小野の塾 PHPで簡単なプログラムを作ってみようの巻 第1話 を読み一通り理解できる
- 追いつけない方は、魁!小野の塾 目次 から入門編を一通り見て下さい。
構築環境
- Windows10
- XAMPP 8.1.2(PHP 8.1.2, MariaDB 10.4.22)
- Laravel v9.33.0
Controller作成
モデルと紐づけてControllerを作成します。
コマンドプロンプトで以下のコマンドを入力します。
オプション
- –model=Bbs ControllerにModelを紐づけます。引数などにBbsモデルが自動的に入ります。
- –resource CRUDを作成するようの関数を自動で定義します。
- –requests Validation用のRequestオブジェクトを作成します。
生成ファイル
- app/Http/Controllers/BbsController.php Controller
- app/Http/Requests/StoreBbsRequest.php 登録用Validation
- app/Http/Requests/UpdateBbsRequest.php 更新用Validation
自動生成されたControllerメソッドとURL Path
| Controller | HTTP | Path | 内容 |
|---|---|---|---|
| index | GET | /bbs | 初期表示(一覧表示) |
| create | GET | /bbs/create | 新規登録用フォーム表示 |
| store | POST | /bbs | 新規登録処理 |
| show | GET | /bbs/{id} | 指定内容表示 |
| edit | GET | /bbs/{id}/edit | 指定内容編集用フォーム表示 |
| update | PUT/PATCH | /bbs/{id} | 指定内容の更新 |
| destroy | DELETE | /bbs/{id} | 指定内容の削除 |
ポイント
URL及びHTTP METHODによりアクセスする関数が異なることに注目してください。
routes/web.php編集
Controllerを作成したので、Routerの設定を行います。今回はAPI開発ではないので、web.php にルートの追加を行います。
ポイント
クライアントからのアクセスは、Controllerへ直接行くわけではなく、Router経由で接続されます。
Routerの設定では、URLとControlllerを関連付けていきます。
<?php
use App\Http\Controllers\BbsController;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::resource('bbs', BbsController::class);
resources/views/bbs.blade.php作成
レイアウト用のデフォルトを作成する必要があるのですが、今回は1ページのみの作成なので、レイアウトは作成せず、そのまま作っていこうと思います。
Laravelのウェルカムページ出力用ファイルとして、welcome.blade.phpがあります。これをコピーし、作成しようと思います。
コマンドプロンプトで以下のコピーコマンドを入力してください。
resources/views/bbs.blade.php ファイルが作成されます。
不要な部分を取り除き、BootstrapのCDNや他のスタイルのCDNなどあらかじめ入れておきます。
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ config('app.name', 'TECH PJIN') }}</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<!-- Font Awesome CSS -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
<!-- Animate.css CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
<!-- Noto Sans JP -->
<link rel="stylesheet" href="https://fonts.bunny.net/css2?family=Nunito:wght@400;600;700&display=swap">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@300&display=swap" rel="stylesheet">
<link rel="stylesheet" href="{{ asset('/css/style.css') }}">
</head>
<body>
BBS
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
</body>
</html>
public/css/style.css作成
今回は、魁!小野の塾 PHPで簡単なプログラムを作ってみようの巻 第1話 で作成したHTMLを利用する予定なので、styleもそのまま利用しようと思います。
配置場所ですが、public フォルダーにcssフォルダーを作成し、そこに配置します。
ポイント
css, js, images など、処理に関係なく読み込みたいファイルなどは、public フォルダーに配置します。
Blade(Laravelのview)側で呼び出す場合は、asset関数でパスを指定して取得します。
今回は、{{ asset(‘/css/style.css’) }} となります。
@charset "utf-8";
*{
font-family: "Noto Sans JP";
}
body{
margin-top: 120px;
}
前回からの変更点
前回作成した時は、Sawarabi Gothicだったのですが、今回は、Noto Sans Japaneseになっております。
また、Boostrapのバージョンも5へ更新しています。
app/Http/Controllers/BbsController.php
viewを作成したので、コントローラから呼び出しを行います。
呼び出す場合は、view関数を利用し、bbs.blade.phpの場合は、blade.phpを除いた部分を指定します。
今回は、bbs.blade.phpなので、view(‘bbs’)になります。
初回アクセスのURLは、/bbsとなり、index関数へのアクセスとなります。
<?php
namespace App\Http\Controllers;
use App\Models\Bbs;
use App\Http\Requests\StoreBbsRequest;
use App\Http\Requests\UpdateBbsRequest;
class BbsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('bbs');
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\StoreBbsRequest $request
* @return \Illuminate\Http\Response
*/
public function store(StoreBbsRequest $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\Bbs $bbs
* @return \Illuminate\Http\Response
*/
public function show(Bbs $bbs)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Bbs $bbs
* @return \Illuminate\Http\Response
*/
public function edit(Bbs $bbs)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\UpdateBbsRequest $request
* @param \App\Models\Bbs $bbs
* @return \Illuminate\Http\Response
*/
public function update(UpdateBbsRequest $request, Bbs $bbs)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Bbs $bbs
* @return \Illuminate\Http\Response
*/
public function destroy(Bbs $bbs)
{
//
}
}
ポイント
今回の実装は、一覧表示、登録、削除のみの実装となります。
resourceオプションを指定して作成したControllerではCRUDの基本関数がすべて入っていますが、
今回利用するのは、index, store, destroyのみとなります。
設定が完了したら、http://localhost/bbs/public/bbs をブラウザで実行しエラーが出ずに、BBSと表示されれば設定完了です。
次回から、登録処理、一覧表示、削除の順番で解説していきます。