Developer

Laravelで簡単な掲示板を作成の巻 第2話 魁!小野の塾
2022.10.05
Lv2

Laravelで簡単な掲示板を作成の巻 第2話 魁!小野の塾

Laravelで簡単な掲示板を作成

魁!小野の塾 PHPで簡単なプログラムを作ってみようの巻 第1話 では、簡単な掲示板をPHPで作成しました。

今回は、同じような機能をLaravelで構築していきます。
機能的には、登録処理、削除処理、エラーチェックなどを実装していきます。

前回のソースは、200行程度の1ファイルだったのですが、今回はどのように書き方が変わるのか、見ていければ良いかと思います。
また、フレームワークを利用する機会は増えましたので、しっかり開発手順を覚えて頂きたいです。

Bootstrapを利用したサンプルを作成していますが、Laravelは Tailwind をCSSのフレームワークとして押しています。
Tailwindはコンポーネント開発を前提としたCSSフレームワークで、CSSを知っている人には使いやすいですが、Bootstrapを長年利用している人には、少し難易度が高いと思います。

対象のスキルレベル

構築環境

  • Windows10
  • XAMPP 8.1.2(PHP 8.1.2, MariaDB 10.4.22)
  • Laravel v9.33.0

Controller作成

モデルと紐づけてControllerを作成します。
コマンドプロンプトで以下のコマンドを入力します。

php artisan make:controller BbsController –model=Bbs –resource –requests

オプション

  • –model=Bbs ControllerにModelを紐づけます。引数などにBbsモデルが自動的に入ります。
  • –resource CRUDを作成するようの関数を自動で定義します。
  • –requests Validation用のRequestオブジェクトを作成します。

生成ファイル

  1. app/Http/Controllers/BbsController.php Controller
  2. app/Http/Requests/StoreBbsRequest.php 登録用Validation
  3. 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があります。これをコピーし、作成しようと思います。

コマンドプロンプトで以下のコピーコマンドを入力してください。

copy resources\views\welcome.blade.php resources\views\bbs.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と表示されれば設定完了です。

次回から、登録処理、一覧表示、削除の順番で解説していきます。

魁!小野の塾 連載目次リンク