Laravel | BBS | プロジェクトの作成

ホーム  

概要

前回の BBS は操作が分かりずらかったので作り直しました。デザインも変わりました。

今回は、Laravel で BBS (掲示板)を作ろうと思います。前回作った Todo との違いは、投稿に対して反応 (コメント) がある点でしょう。データ構造的にみても、Todo は同じ構造のデータを複数作っているだけですが、その一つ一つの投稿に対して複数のコメントがあるということは、Todo 構造のデータ一1つに対して、コメント構造のデータが複数つくことになります。こういうことを一対多のリレーション (関係、Relationship) と呼びます。実際に、今回は、Todo 構造のデータベースとコメント構造のデータベースの二つを作ります。

一見、Todo データにコメント欄をつければ良いように思いますが、コメントの数は決まっていません。多数のコメント欄をつけておけば良いように思いますが、それは非効率です。そしてまた、たとえばコメント欄を増やそうと思ったら、そのデータを使うアプリケーションを一度止めなければなりません。いろいろ考えると、データベースを二つ持っていたほうが有利なことが分かります。

完成画面は次のようになります。


BBS プロジェクト

任意の場所にプロジェクトを作ります。私は、ホームディレクトリに laravel というフォルダを作り、その中に、 いろいろなプロジェクトを作っています。

コマンドプロンプトもしくはターミナルを起動して、次のようにコマンドします。


# プロジェクトの作成を作成します
# 以前の bbs が同じディレクトリに残っている場合は、それを削除するか、
# 新しく作るプロジェクトの名前を bbs2 などにしてください。

composer create-project laravel/laravel bbs

# プロジェクトのディレクトリに移動
cd bbs

# プロジェクトの起動
php artisan serve

# ブラウザで確認
お使いのブラウザで
localhost:8000
もしくは
127.0.0.1:8000
にアクセスすると Laravel のデフォルトぺージが表示されます。


ルーティング

ルーティング (Routing) とは、localhost:8000/ の / 以下のどのアドレスにアクセスすると、どのぺージが表示されるかを決めることです。

  1. bbs プロジェクトの routes/web.php の welcome を index に変更します。
    return view('welcome');
    を
    return view('index');
    
  2. resources/views/welcome.blade.php を index.blade.php という名前に変更。index.blade.php のように blade をつけると、php ファイルの中で変数を使えたり、いろいろな命令を使えるようになります。
    welcome.blade.php
    を
    index.blade.php
    
  3. index.blade.php の中身をすべて削除して次のように書き換えます
    <h1>This is my BBS.</h1>
    
  4. お使いのブラウザで localhost:8000 にアクセスして、結果を確認します。 This is my BBS. と表示されていれば OK です。
  5. ターミナルもしくはコマンドプロンプトで次のようにコマンドします。これにより、BBS というモデルと、そのモデルの構造を設定するマイグレーションファイルと BBSController というコントローラーができます。
    php artisan make:model Post -mc
    
  6. 続けて、コメント用のデータ構造も作ります。これにより、Comment というモデルと、そのモデルの構造を設定するマイグレーションファイルと CommentController というコントローラーができます。
    php artisan make:model Comment -mc
    
  7. routes/web.php を次のように書き換えます
    <?php
    
    use App\Http\Controllers\PostController;
    use App\Http\Controllers\CommentController;
    use Illuminate\Support\Facades\Route;
    
    Route::get('/', [PostController::class, 'index'])->name('posts.index');
    Route::resource('posts', PostController::class)->except(['index']);
    Route::resource('posts.comments', CommentController::class)->only(['store', 'destroy']);
    
  8. ターミナルもしくはコマンドプロンプトで次のようにコマンドしてルーティングを確認します
    php artisan route:list --name=posts
    
    結果
    GET|HEAD        / ............................................... posts.index › PostController@index
      POST            posts ........................................... posts.store › PostController@store
      GET|HEAD        posts/create .................................. posts.create › PostController@create
      GET|HEAD        posts/{post} ...................................... posts.show › PostController@show
      PUT|PATCH       posts/{post} .................................. posts.update › PostController@update
      DELETE          posts/{post} ................................ posts.destroy › PostController@destroy
      POST            posts/{post}/comments ............... posts.comments.store › CommentController@store
      DELETE          posts/{post}/comments/{comment} . posts.comments.destroy › CommentController@destroy
      GET|HEAD        posts/{post}/edit ................................. posts.edit › PostController@edit
    例えば1行目は、GET 方式で / (ルート) にアクセスすると、posts.index という名前で、PostController の index メソッドが呼び出されるという意味になります。
  9. app/Http/Controllers/PostController.php を開いて、次のように index メソッドを書き足します
    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    class PostController extends Controller
    {
        public function index()
        {
            return view('index');
        }
    }
    
    return view('index'); は、resources/views の index.blade.php を表示しろという意味です
  10. localhost:8000 もしくは 127.0.0.1:8000 にアクセスして、This is my BBS. と表示されていれば OK です。



1106 visits
Posted: Jul. 28, 2025
Update: Jul. 28, 2025

ホーム   目次