🛸

Laravel 学習備忘録☺

2022/11/17に公開約3,900字

Laravel学習備忘禄

プロジェクト名設定

PROJECT_NAME=learn_laravel

コンテナー削除

docker rm ${PROJECT_NAME}_laravel.test_1 > /dev/null 2>&1
docker rm ${PROJECT_NAME}_mysql_1 > /dev/null 2>&1
docker rm ${PROJECT_NAME}_redis_1 > /dev/null 2>&1
docker rm ${PROJECT_NAME}_mailhog_1 > /dev/null 2>&1
docker rm ${PROJECT_NAME}_selenium_1 > /dev/null 2>&1
docker rm ${PROJECT_NAME}_meilisearch_1 > /dev/null 2>&1

ネットワーク削除

docker network rm ${PROJECT_NAME}_sail > /dev/null 2>&1

ボリューム削除

docker volume rm ${PROJECT_NAME}_sail-meilisearch > /dev/null 2>&1
docker volume rm ${PROJECT_NAME}-app_sail-mysql > /dev/null 2>&1
docker volume rm ${PROJECT_NAME}-app_sail-redis > /dev/null 2>&1

プロジェクト作成

curl -s "https://laravel.build/${PROJECT_NAME}" | bash

作成したプロジェクトディレクトリの中へ移動

cd ${PROJECT_NAME}

コンテナー起動

./vendor/bin/sail up

ルーティング設定

トップへのアクセスをリダイレクト

Route::redirect('/', '/todo');

welcomeページを移動

Route::get('/welcome', function () {
    return view('welcome');
});

TODOリスト

Route::get('/todo', function () {
    return 'TODOリスト';
});

TODO詳細

Route::get('/todo/{id}', function ($id) {
    return 'TODO詳細 ' . $id;
});

TODO追加

Route::post('/todo', function () {
    return 'TODO追加';
});

TODO更新

Route::put('/todo/{id}', function ($id) {
    return 'TODO更新 ' . $id;
});

TODO削除

Route::delete('/todo/{id}', function ($id) {
    return 'TODO削除 ' . $id;
});

たーみなるで、

curl を使用して、想定通りの動きを
しているのかの確認をする。

リダイレクト

curl -X GET http://localhost

Welcome

curl -X GET http://localhost/welcome

TODOリスト

curl -X GET http://localhost/todo

TODO詳細

curl -X GET http://localhost/todo/1

TODO追加

curl -X POST http://localhost/todo

TODO更新

curl -X PUT http://localhost/todo/1

TODO削除

curl -X DELETE http://localhost/todo/1

POSTは

CSRF対策機能が作動してるのでOK

コントローラーの作成

app/Http/Controllers ディレクトリ下に
配置します。

Artisanコマンド使用

./vendor/bin/sail artisan make:controller Sample/IndexController

app/Http/Controllers/Sample/IndexController.php

が生成される。

処理を書く部分

<?php

namespace App\Http\Controllers\Sample;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class IndexController extends Controller
{
    public function show()
    {
        // ここに処理を書いていくことになる
    }
}

ルーター設定

コントローラーをルーターに設定

localhost/sample にアクセスした時に
作成したコントローラーのshowメソッドが
呼び出されるようにしましょう。

Route::get('/sample', 'App\Http\Controllers\Sample\IndexController@show');

ddヘルパー関数を使用して、
表示させる。

ddヘルパーは var_dump()的なもの。

引数の値を表示して、処理を中断する関数

class IndexController extends Controller
{
    public function show()
    {
        dd('Sampleページだよ\(^o^)/');
    }
}

IDをパラメーターとして受け取るルートを追加する

Controller:

public function detail($id)
{
    dd("IDは、${id}です!");
}

web.php:

Route::get('/sample/{id}', 'App\Http\Controllers\Sample\IndexController@detail');

http://localhost/sample/2 へアクセス

IDは2です!

的な表示が出ればOK

シングルアクションコントローラーの生成

./vendor/bin/sail artisan make:controller Todo/IndexController --invokable

--invokable オプションを付加することで、シングルコントローラー用のコントローラーが生成されます。

Todo/IndexController

<?php

namespace App\Http\Controllers\Todo;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class IndexController extends Controller
{
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function __invoke(Request $request)
    {
        return 'TODOリスト表示予定!';
    }
}

ルートの設定:

Route::get('/todo', 'App\Http\Controllers\Todo\IndexController');

これでも可

Route::get('/todo', App\Http\Controllers\Todo\IndexController::class);

Discussion

ログインするとコメントできます