[Laravel挑戦] タスク管理アプリの実装練習

起業準備

全体の実施の流れを俯瞰する

まず最初に、これからやろうとしていることをざっと予習する。

・モデルを作成する)
 マイグレーションファイルを作ってテーブルを定義して、Schema::create()でカラム定義(各カラムの型/サイズの定義)をして、最後にモデルを作る。ただ、migrationとmodelの関連付は現時点で若干謎がある。

・コントローラーを作る)
 リソースコントローラを使ってCRUD操作を1行のコードでコントローラに割り当てる。URL上で指定されるコマンドに応じてルート情報を記載していく。

・ビューを作る)
 index.blade.phpでコントローラで指定されたパスにあるview()で処理をする。ここでまたTailwindCSSが登場するけど、会いたくないなあ。。

モデルを作成する

テーブルを作る

マイグレーションファイルを作る

以下のコマンドでマイグレーションファイルが作成される。

php artisan make:migration create_tasks_table

マイグレーションファイル内のSchema::create関数に、下記のようなカラム定義をする。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->id();
            $table->string('name',100);
            $table->boolean('status')->default(false);
            $table->timestamp('updated_at')->useCurrent()->nullable();
            $table->timestamp('created_at')->useCurrent()->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('tasks');
    }
};

テーブルを作成する

マイグレーションファイルを実行するために以下のコマンドを実行する。

php artisan migrate

マイグレーションファイルで定義したように、phpMyAdminのデータベースlaravel_testに、create_tasks_tableというテーブルが用意される。カラム定義も指定通り。

モデルを作る

tasksテーブルの作成ができた。

このテーブルからデータを取得したり、保存するモデルを作成する。

php artisan make:model Task

チュートリアルブログでは、

テーブル名が、「tasks」と複数形だったので、モデル名は単数形になります。

と書いてある。

この文字面の関係で、テーブルとモデルの関連付けができる、ということなのか。

app/Modelsは以下に以下のTask.phpが作成される。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    use HasFactory;
}

コードを見る限り、tasksテーブルとの関連付は特になさそう。

でも、モデル作成はこれで終わり??らしい。

コントローラーを作る

復習になるが、コントローラはモデルとビューを繋ぐ肝心要。

ルーティングという仕組みを使って、CRUD操作(Create/Read/Update/Delete)を1行のコードで割り当てるリソースコントローラを用いる。

リソースコントーラーを作る

php artisan make:controller TaskController –resource

TaskController.phpが作成された。

あらかじめCRUD操作に必要なメソッド群(index、create、store、show、edit、update、destroy)のテンプレートが書かれている。

大事なことは、リソースコントローラで作られたCRUD操作メソッドに処理を橋渡しするのはルーティングという仕組みが行うということ。

route/web.phpに以下を記載すると、橋渡しが完了する、らしい。

Route::resource('tasks', TaskController::class);

この状態で以下のコマンドを実行すると現在のルーティング情報を確認できる。

php artisan route:list

チュートリアルブログでは

「このURIにアクセスがあったら、このアクションを実行する」という関係があらかじめ決まっているので、あとはその決まりに従って実装していきます。

波括弧で{ }となっている部分は、IDです。

たとえば、「/tasks/2」でGETアクセスだったら、showメソッドが呼ばれて、IDが2のタスクを表示します。

とあるが、意味がさっぱりわからない。

とくに

たとえば、「/tasks/2」でGETアクセスだったら、showメソッドが呼ばれて、IDが2のタスクを表示します。

???

実際にTaskController.phpのshowメソッドに以下を記述してみた。

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        if ($id == 2){
            dd("idは{$id}です");
        }
        else {
            dd("No,idは{$id}です");
        }
    }

tasks/2でアクセスしたら

がddによってブラウザに表示された。

tasks/4でアクセスすると

と表示された。

そういうことか。

前に使ったルーティングでは、この”tasks”にくるワードを変えて、Controller処理を割り当てていたけど、tasksにIDをつけて処理を分けることができるのか。

ビューを作る

時間がなくなってきた。

ビュー以降はまた次回。

コメント

PHP Code Snippets Powered By : XYZScripts.com
タイトルとURLをコピーしました