Laravel – マスアサインメント

概要

  • マスアサインメントによって、フォームからPOSTされたパラメーターを一括してモデルの属性にセットして、データベースに書き込める
  • ただしセットできる属性をモデルの$fillable配列に限定列挙する必要がある
  • モデルのインスタンス生成時に、セットできるパラメーターをonlyメソッドで限定列挙できる
  • $fillableのほかに$guarded配列も指定できて、こちらは指定した属性をモデルのセットの際に排除する

準備

以下のようなフォームがあって、namecommentをPOSTする。

POSTはコントローラーのstore()メソッドにルーティングされる。

ルーティング先のコントローラーでは、モデルのインスタンスを生成し、その属性にPOSTされたパラメーターをセットしてデータベースに書き込む。

マスアサインメント

Requestのall()メソッド

Request引数のall()メソッドで得られる内容を確認。

CSRF対策のトークンを含んだパラメーターの配列が得られる。

$request->all()の結果を、モデルインスタンスのfill()メソッドによって属性にセット。dd()で内容を確認してみる。

エラー。

マスアサインメントのためにはfillable属性に加えなければならないと言われる。

モデルの$fillableプロパティー

モデルの定義で、$fillable配列に取得したいプロパティーを列挙する。

先ほどのコードの実行結果。エラーがなくなる。dd()でプロパティーがセットされたインスタンスの内容を確認。

  • fillableプロパティーに2つのパラメーター名がセットされている
  • attributesに属性とその内容が配列としてセットされている
  • guardedは指定しておらず、サイズ1、内容'*'の配列となっている

以上を踏まえて、fillableがセットされたモデルのマスアサインメントとデータベース登録を以下に例示。

マスアサインメントの記述方法

マスアサインメントの書き方には複数あって、同じ結果が得られる。create()スタティックメソッドは、インスタンスの生成とデータベースの書き込みを一つのメソッドで行う。

Requestのonly()メソッドによる限定

意図しないパラメーターの追加を避けるため、all()メソッドではなくonly()メソッドでパラメーターを限定列挙できる。

 

Laravel – tinker – モデルの操作

tinkerの起動

php artisan tinkerでtinkerを起動。

helpでコマンドが確認できる。

モデル・データベースの操作

データの登録

モデルとマイグレーションで作成したモデルを使う。

まずshowコマンドでモデルクラスを見てみる。

変数$modelTestModelクラスのインスタンスを生成。

マイグレーションファイルで定義したフィールド(product_nameamount)に値を代入。

変数を入力すると、その内容が確認できる。

lsで定義された変数を、ls -lでそれらを少し詳しく見ることができる。

変数の内容をデータベースに保存するステートメントを実行。

データベース側で確認すると、日付もちゃんと登録されている。

さらに2つのデータを登録。

データベース側でも登録されているのが確認できる。

全データ取得

tinkerで変数$modelsにデータベースの全データを取得。

$modelsは配列で要素はゼロから始まるので、$models[1]は2番目のデータ。

データの更新

スタティック関数find()id=2のデータを$modelに取得。

取得したid=2のデータのamount0に変更して保存。

データが更新されているのを確認。

データベースでも確認できる。

データの削除

id=2のデータを取得。

delete()メソッドでデータベースから削除。

全データを取得すると、id=2のデータが削除されている。

データベース側でも確認できる。

 

Laravel – モデル作成とマイグレーション

データベース設定の確認

アプリケーションディレクトリー直下の.envファイルでデータベースの設定を確認する。DB_DATABASEに設定されたデータベースが作成済みでRDBMSでアクセス可能であることを確認する。

モデルの作成

モデル作成コマンド

モデルの作成には、artisanmake:modelコマンドを使う。同時にデータベースを定義するマイグレーションファイルも作成するときは--migrationオプションを付ける。

php artisan make:model モデル名 --migration

モデル名の考え方は以下の通り。

  • データベースのレコードに保存する対象として、単数の名詞とする
  • モデル名はアッパー・キャメルケース(パスカルケース)で定義する

以下はTestModelというモデルを作成したケース。

モデルの作成に成功したことと、2021_08_23…という名前でマイグレーションファイルが作成されたことが表示されている。

マイグレーションファイルの作成は--migrationオプションを付けたためで、これをつけないとモデルのだけが作成される。

モデルクラスファイル

モデルのクラスファイルはappディレクトリー下に作成される。コマンドで指定したモデル名に拡張子.phpが付けられている。

以下がモデルクラスファイルの内容。

  • 名前空間をAppとしている
  • 名前空間Illuminate\Database\EloquentModelファイルを利用する
  • ModelファイルはModelクラスのファイル
  • 今回作成したTestModelクラスはModelクラスを継承している
  • モデル作成で定義した名前がそのままクラス名になっている
  • 作成したクラスの中身は空

オプション指定

モデル作成コマンドのオプションは-h/--helpオプションで指定できる。

主なオプションは以下の通り。

-c/--controller
コントローラーを作成する。
-m/--migration
マイグレーションファイルを作成する。
-r/--resource
リソースベースのアクションが含まれたコントローラーが生成される。ルーティングでのonlyexceptと関係なく、すべてのアクションが含まれる。
-s/--seed
シーダーファイルを作成する。

マイグレーションファイル

ファイル名

モデルクラスファイルと同時に作成されたマイグレーションファイルは、database/migrations下にある。新たに作成された2021_08_23...のマイグレーションファイルが確認できる。

マイグレーションファイルのファイル名構成は以下の通り。

日付_時刻_create_テーブル名_table.php

テーブル名はモデル名をスネークケースに変更し、複数形となっている。

マイグレーションファイルの内容は以下の通り。

up()メソッド

up()メソッドではテーブルを作成するときのカラム定義が記述されている。

  • bigincrements()bigint unsigned型、AUTO_INCREMENT設定のカラムidを定義
  • timestamps()timestamp型でcreated_atupdated_atの2つのカラムを定義

bigIncrements()によるIDを外部キーで参照する場合

bigIncrements()で生成されるカラムはbigint(unsigned)となる。他テーブルでこれを外部キーとして参照する場合のカラム型はbigint unsignedとする。マイグレーションファイルで指定する場合はunsignedBigInteger()とする。

down()メソッド

down()メソッドは、test_modelsテーブルが存在する場合にこれを削除(DROP)。

マイグレーション実行

マイグレーションコマンドについてはこちらを参照。

状態確認

マイグレーション実行前のテーブルの状態。準備の時に作成したままになっている。

マイグレーションの実行状態は以下のコマンドで確認。

php artisan migrate:status

今回作成されたマイグレーションファイルだけが未実行となっている。

マイグレート

以下のコマンドで、マイグレーションファイルの設定に従ってテーブルを作成する。

php artisan migrate

マイグレーションの結果、データベースにテーブルが作成される。テーブル名はマイグレーションファイル名にもあるとおりで、以下のように付けられる。

  • モデル名のキャメルケースをスネークケースに変更
  • 複数形にする

データベースでテーブルが作成されていることを確認。

テーブル構造を確認。timestamp()によって、created_atupdated_atの2つのカラムが作られている。

ただしtimestamp型は2038年問題が発生するため、datetime型に変更する方がよい。

ロールバック

ロールバックにより、作成したテーブルを削除してマイグレーション前の状態に戻すことができる。

php artisan migrate:rollback

ロールバックを実行することで、ここまでで作成したtest_modelsテーブルが削除される。

ただしマイグレーションファイルは残っていて、編集などを行った後に再度マイグレーションできる。

マイグレーションファイルの実行状態も未実行に戻る。

マイグレーションファイルの編集とマイグレーション

test_modelsテーブルのカラムを以下のように編集する。

  • idカラムはそのまま
  • VARCHAR(20)product_nameカラムを追加
  • int型でamountカラムを追加
  • created_atupdated_attimestamp型からdatetime型に変更

参考:利用可能なカラムタイプ

マイグレーション前のファイルを以下のように編集してマイグレート。

以下の構造のテーブルが作成される。

モデルの削除

モデルとテーブルを削除する手順は以下の通り。

  1. 該当テーブルのマイグレーションの前までロールバック
  2. マイグレーションファイル削除
  3. モデルファイル削除

timestampの2038年問題について

モデルとマイグレーションファイルを生成させると、自動的にtimestampsが設定されるが、MySQLとの組み合わせの場合に2038年問題が発生する。datetime型で書きなおすなどの対応をしておくべき。

モデル名とテーブル名について

モデルとテーブルを生成するときの命名の流れは以下のようになっている。

  • モデル名は単数形でアッパーキャメルケース
  • モデルクラスファイル名はモデル名に.phpの拡張子
  • モデルクラス名はモデル名と同じ
  • テーブル名はキャメルケースからスネークケースに変換され、複数形になる

複数形への変更はLaravelがエレガントにやってくれて、不規則な複数形にも対応している。ただし不可算名詞にはそのままsが付くようだ。

  • TestModeltest_models
  • TestDiary→test_diaries
  • CompanyPersonCompanyPeople
  • WildGoosWildGees
  • StockWaterStockWaters

なお、敢えてモデル名をスネークケースにすると、クラスファイル名、モデルクラス名もキャメルケースのままで、テーブル名は複数形になる。

  • test_modeltest_models

 

Laravel – 現在のURLの取得

url()ヘルパー

ヘルパーLaravel - url()を参照。現在のドメインやURLに関する情報が得られる。

Route::current()

以下のメソッドでドメイン名を除いた現在のフルパスが得られる。

これとurl()ヘルパーを組み合わせて、以下でもカレントパスを得られる。

 

Laravel – バリデーションメッセージの日本語化

概要

バリデーションエラーはデフォルトで英語だが、これを日本語にしてみる。

方法の1つとして、ロケールjaに対するメッセージファイルを編集する方法を整理する。

ロケールファイルを一括して日本語化する方法はこちら

元になるアプリケーション

ルーティング

GETリクエストに対してフォームを含むビューを表示し、POSTリクエストに対してバリデーション処理を実行する。

ビュー

フォームでユーザー名とメールアドレスを入力し、POST処理の結果バリデーションエラーがあれば表示する。

コントローラー

フォーム表示

GETリクエストに対してフォーム画面を表示する。

POST処理

POSTリクエストに対して、ユーザー名とメールアドレスのバリデーションを実行。

この場合のバリデーションエラーは以下の様に表示される。

あるいは

ロケール設定による日本語化

ReaDouble.comのバリデーションのドキュメントでエラーメッセージのカスタマイズについて説明されていて、ローカライゼーションについては多言語化ドキュメントを参照するよう示唆されている。

これに基づいて、バリデーションエラーメッセージの日本語化をローカライゼーション周りで実装する方法を整理する。

言語の選択

config/app.phpでロケール設定を変更する。

  • localeをデフォルトのenからjaに変更
  • localejaで見つからないときのfallback_localeがデフォルトでenになっていることを確認
  • これにより、日本語ロケールの設定がある場合は日本語が適用され、見つからない場合は英語の設定が適用される

バリデーションエラーメッセージのコピー・編集

resources/en/validation.phpで英語のバリデーションメッセージが定義されている。

日本語ロケール設定のため、jaディレクトリーを作成し、そこにコピーしたvalidation.phpを編集する。

  • resources/jaディレクトリーを作成
  • jaディレクトリー下にvalidation.phpをコピー
  • 必要なバリデーションメッセージを日本語化

:attributeはエラーが発生したフィールドのname属性の値で置き換えられる。また:maxはバリデーションで設定した値に置き換えられる。

これにより、バリデーションエラーが生じたときの表示は以下の様に日本語化される。

あるいは

属性の日本語化

上記のメッセージでは、:attributeが置き換えられるname属性のnameemailがそのまま現れている。

これらは、validation.phpの最後にある'attributes'に連想配列を記述することで、日本語表現に置き換えることができる。

今回の例の場合、name属性はname(ユーザー名)とemail(メールアドレス)なので、これらを日本語に置き換えるよう定義する。

この結果、バリデーションエラーメッセージは以下の様になる。

あるいは

エラーメッセージを日本語化したもの以外のバリデーションに対しては、元のまま残っている英語の内容が使われる。

たとえばバリデーションを追加する。

そうするとバリデーションエラーは以下のようになる。

全体のセンテンスは英語だが、name属性emailattributesで変更した内容に置き換えられている。

 

 

Laravel – 動的メッセージ表示

概要

バリデーションエラーや登録成功などのメッセージを一時的に表示する方法を整理する。

ダイアログによりブラウザー表示領域とは別に表示する方法と、表示領域にメッセージを出して動的に消去する方法の2つ。

エラー・成功メッセージの登録

以下のような例で考えていく。

  • GETリクエストから表示用コントローラー・アクションにルーティング
  • アクションからフォームを含むページを呼び出す
  • フォームにユーザー名とメールアドレスの入力テキストボックスを配置

  • 送信ボタンが押された場合のPOSTに対して、バリデーション用コントローラー・アクションにルーティング
  • バリデーション用アクションでは、ユーザー名とメールアドレスのバリデーションを記述
    • バリデーション結果が妥当な場合はflash()で成功メッセージを登録
    • バリデーション結果が妥当でない場合は、それ以降は実行されず$errorsに結果が保存される
  • いずれの場合も元のGETルートにリダイレクトされる

状況に応じて登録された/空のままの$errorsflashに対して、ビュー側で表示する。

ダイアログ表示

$errorsflashをダイアログで表示する方法。

ビューのhead要素内で、これらの状態に応じたメッセージを生成し、Javascriptのalertの引数に渡している。

複数のエラーメッセージを改行文字を挟んでつなげるのに、PHPのinplode()関数を使っている。

スライドアップによる一時表示

エラーや成功メッセージをブラウザーの上部などに表示し、一定時間後にそれをスライドアップなどで消去する。

メッセージ表示領域の設定と、Javascriptによる動的な消去の2段階で整理する。

メッセージ表示エリアの設定

ビューのbody要素最上部で、ディレクティブによってメッセージ表示領域を動的に生成している。その際に、エラー/成功に応じたクラスを要素に設定している。

  • $errors->any()でエラーが登録されていれば、エラー表示領域を生成
  • session()->has()で成功メッセージが登録されていれば成功メッセージ表示領域を生成

ビューのhead要素内で、エラーメッセージ領域/成功メッセージ領域それぞれのクラスに応じたスタイルを設定している。

なお、エラーメッセージは複数のメッセージを改行で表示させたいので、PHPのImplode()関数で区切りを<br>としたうえで{!! ... !!}で囲んでエスケープを抑制している。

メッセージ表示エリアの消去

エラー/成功のクラスに対して、JQueryでこれらをスライドアップして消去するスクリプトを追加する。

  • 5行目でJQueryをCDNで読み込み
  • script要素内でスライドアップの動作を定義

 

Laravel – flash

概要

  • セッションのflash()メソッドは、put()メソッドと同じくセッションにキーと値のデータを登録できる
  • ただしそのデータは、次のリクエストの間だけ保存され、その後は削除される
  • このためflashはコントローラー処理結果の通知などに使われる
  • flashの操作はsession()グローバルヘルパーを使うが、Requestインスタンス経由でもよい

基本形

flashへの登録

session()->flash('キー', 値);
$request->session()->flash('キー', 値);

flashのデータ存在確認

session()->has('キー')

flashのデータ参照

session()->get('キー')

実装例

ビュー

ビューから見た動作は以下の通り

  • GETリクエストでルーティングされ、フォームを表示する
  • ユーザー名を入力後に送信ボタンを押すと、ユーザー名のバリデーション用コントローラーに制御を移す
  • バリデーションの結果、このページにリダイレクトされ、結果に応じて$errorsflashの内容が表示される
  • $errorsはバリデーション結果が妥当でない時に自動でメッセージが登録される
  • flashはバリデーション結果が妥当な時にコントローラーでメッセージを登録する

表示アクション

最初のルーティングで呼ばれ、ビューを初期状態で表示する。

バリデーションアクション

フォームから呼び出され、バリデーションのみを行い、元のページへリダイレクトする。

  • バリデーション結果が妥当でなければ、$errorsにメッセージが登録され、初期ページにリダイレクト
  • バリデーション結果が妥当な時はflashにメッセージを登録して初期ページにリダイレクト

 

Laravel – 各ヘルパーのパス指定

概要

引数にパス文字列を与えて、サーバー上のパスやURLを返すヘルパー。

パス系はpublic_pathのみ挙動が異なるが、全般に以下のように決めておくと紛れがない。

  • 引数を省略、もしくは引数に''を与えると、それぞれのターゲットパスが得られる
  • 引数に'/'を指定してはいけない
  • 引数のパス指定の頭に'/'を付けない
  • 戻り値のパスの後に動的にパスを付加したいといった場合は、以下のいずれか
    • 引数のパス指定の最後に'/'を付ける
    • 引数のパス指定の最後に'/'を付けず、戻り値に明示的に'/'を連結する

URL系はパス系と挙動が異なる。

  • 引数は省略できない
  • 引数に''を与えると、ドメイン名のみのURLが得られる
  • 引数に'/'を与えると、ドメイン名の後ろに’/’が付いたURLが得られる
  • 引数のパスの最後に'/'を付けても付けなくても、結果のURLの最後には'/'は付かない
  • 戻り値のパスの後に動的にパスを付加したいといった場合は、以下の一択
    • 引数のパス指定の最後に'/'を付けても付けなくても、戻り値に明示的に'/'を連結する

サーバーパス系

app_path()~appディレクトリー

Laravelアプリケーションのappディレクトリー下の相対パスを与えて、サーバー上のフルパスを返す。

末尾の'/'の有無で結果が変わる。

絶対パスの形式にすると戻り値のパスがおかしくなる。

  • app_path()app_path('')
    /.../アプリケーションディレクトリー/app
  • app_path('abc/def')
    /.../アプリケーションディレクトリー/app/abc/def
  • app_path('abc/def/')
    /.../アプリケーションディレクトリー/app/abc/def/
  • app_path('/')
    /.../アプリケーションディレクトリー/app//
  • app_path('/abc/def')
    /.../アプリケーションディレクトリー/app//abc/def
  • app_path('/abc/def/')
    /.../アプリケーションディレクトリー/app//abc/def/

base_path()~アプリケーションのベースディレクトリー

Laravelアプリケーションディレクトリー下の相対パスを与えて、サーバー上のフルパスを返す。

末尾の'/'の有無で結果が変わる。

絶対パスの形式にすると戻り値のパスがおかしくなる。

  • base_path()base_path('')
    /.../アプリケーションディレクトリー
  • base_path('abc/def')
    /.../アプリケーションディレクトリー/abc/def
  • base_path('abc/def/')
    /.../アプリケーションディレクトリー/abc/def/
  • base_path('/')
    /.../アプリケーションディレクトリー//
  • base_path('/abc/def')
    /.../アプリケーションディレクトリー//abc/def
  • base_path('/abc/def/')
    /.../アプリケーションディレクトリー//abc/def/

config_path~configディレクトリー

Laravelアプリケーションのcopnfigディレクトリー下の相対パスを与えて、サーバー上のフルパスを返す。

末尾の'/'の有無で結果が変わる。

絶対パスの形式にすると戻り値のパスがおかしくなる。

  • config_path()config_path('')
    /.../アプリケーションディレクトリー/config
  • config_path('abc/def')
    /.../アプリケーションディレクトリー/copnfig/abc/def
  • config_path('abc/def/')
    /.../アプリケーションディレクトリー/copnfig/abc/def/
  • config_path('/abc/def')
    /.../アプリケーションディレクトリー/copnfig//abc/def
  • config_path('/abc/def/')
    /.../アプリケーションディレクトリー/copnfig//abc/def/

public_path~publicディレクトリー

Laravelアプリケーションのpublicディレクトリー下の相対パスまたは絶対パスを与えて、サーバー上のフルパスを返す。

末尾の'/'の有無で結果が変わる。

相対パス・絶対パスいずれの形式も指定可能だが、結果は同じ。

  • public_path()public_path('')
    /.../アプリケーションディレクトリー/public
  • public_path('abc/def')
    /.../アプリケーションディレクトリー/public/abc/def
  • public_path('abc/def/')
    /.../アプリケーションディレクトリー/public/abc/def/
  • public_path('/')
    /.../アプリケーションディレクトリー/
  • public_path('/abc/def')
    /.../アプリケーションディレクトリー/public/abc/def
  • public_path('/abc/def/')
    /.../アプリケーションディレクトリー/public/abc/def/

resource_path~resourcesディレクトリー

Laravelアプリケーションのresourcesディレクトリー下の相対パスを与えて、サーバー上のフルパスを返す。ディレクトリー名は複数のresourcesだがヘルパー名は単数形のresource

末尾の'/'の有無で結果が変わる。

絶対パスの形式にすると戻り値のパスがおかしくなる。

  • resource_path()resource_path('')
    /.../アプリケーションディレクトリー/resources
  • resource_path('abc/def')
    /.../アプリケーションディレクトリー/resources/abc/def
  • resource_path('abc/def/')
    /.../アプリケーションディレクトリー/resources/abc/def/
  • resource_path('/')
    /.../アプリケーションディレクトリー/resources//
  • resource_path('/abc/def')
    /.../アプリケーションディレクトリー/resources//abc/def
  • resource_path('/abc/def/')
    /.../アプリケーションディレクトリー/resources//abc/def/

storage_path~storageディレクトリー

Laravelアプリケーションのstorageディレクトリー下の相対パスを与えて、サーバー上のフルパスを返す。

末尾の'/'の有無で結果が変わる。

絶対パスの形式にすると戻り値のパスがおかしくなる。

  • storage_path()storage_path('')
    /.../アプリケーションディレクトリー/storage
  • storage_path('abc/def')
    /.../アプリケーションディレクトリー/storage/abc/def
  • storage_path('abc/def/')
    /.../アプリケーションディレクトリー/storage/abc/def/
  • storage_path('/')
    /.../アプリケーションディレクトリー/storage//
  • storage_path('/abc/def')
    /.../アプリケーションディレクトリー/storage//abc/def
  • storage_path('/abc/def/')
    /.../アプリケーションディレクトリー/storage//abc/def/

URL系

asset()~publicディレクトリー下のアセット

Laravelアプリケーションのpublicディレクトリー下の相対パスまたは絶対パスを与えて、アセットへのURLを返す。

末尾の'/'の有無は結果に影響しないが、'/'を単独で指定するとドメイン名の後に'/'が付加されたURLになる。

以下の例では、public/abcディレクトリー下のdefファイルを指定していて、ブラウザーに戻り値のURLを指定するとdefファイルの内容が表示される。

  • asset('abc/def')
  • asset('abc/def/')
  • asset('/abc/def')
  • asset('/abc/def/')
    http://ドメイン/abc/def
  • asset('/')
    http://ドメイン/
  • asset()
    →エラー

セキュア―な通信環境下の場合はsecure_asset()を使う。戻り値はhttp→httpsとなったURL。

url()~アプリケーションのURL

Laravelアプリケーションのドメインより後のディレクトリーを与えて、URLを返す。ルーティングで定義したパスを指定するとドメイン名を含んだURLが得られる。パスの指定は相対/絶対のどちらでもよい。

末尾の'/'の有無は結果に影響せず、戻り値の末尾には常に'/'が付かない。

'/'を単独で指定するとドメイン名の後に'/'が付加されたURLになる。

  • url('abc/def')
  • url('abc/def/')
  • url('/abc/def')
  • url('/abc/def/')
    http://ドメイン/abc/def
  • url('/')
    http://ドメイン/
  • asset()
    →エラー

url()ヘルパーを使ってURLに関する様々な情報を得ることができる。

 

Laravel – セッション

セッションの操作

セッションの操作には、session()グローバルヘルパーを利用する方法と、、アクション引数のRequestインスタンスを経由する方法がある。

session()グローバルヘルパーを利用する方法:

session()->各メソッド;

Requestインスタンスを経由する方法:

$request->session()->各メソッド;

セッションデータの取得・初期化

変数 = session()->get('キー', 初期値);
変数 = $request->session()->('キー', 初期値);
変数 = $request->session()->('キー', function() { return 初期値 });

  • キーに対応するセッションデータの値を変数に代入する
  • キーが存在しない時は、キー初期値をセットしてセッションデータを追加し、その値を変数に代入する

セッションデータの保存

session()->put('キー', 値);
session(['キー' => 値]);
$request->session()->put('キー', 値);

  • キーをセッションデータとして保存する

セッションデータの削除

session()->forget('キー');
$request->session()->forget('キー');

  • キーに対応するセッションデータを削除する

session()->flush();
$request->session()->flush();

  • セッションのすべてのデータを削除する

実装例

ビュー

以下の内容を含むビューを所定の位置に準備。

  • $countが1なら初訪問の旨を、そうでなければ訪問回数を表示
  • カウンターをクリアするためのボタンを表示

設定・変更アクション

コントローラーに以下のアクションを準備し、ルーティング設定する。

  • 'count'キーのセッションデータの値を取得して$countに代入
    • countというキーのセッションデータがなければ値0で作成して、その値を$countに代入
  • $countの値をインクリメント
  • $countの値を渡してビューをレンダリング

削除アクション

forget('キー')
キーに対応するセッションデータを削除する。
flush()
全てのセッションデータを削除する。

フォームのカウンタークリアボタンが押されたときのアクションを準備し、ルーティングを設定する。

  • 'count'キーのセッションデータを削除する
  • 削除した旨を画面に直接表示する

実行結果

  • 最初にアクセスすると、「初めまして」と表示
  • リロードすると「2回目のアクセスです」と表示
  • その後リロードするたびに回数が1つずつ増加
  • カウンタークリアボタンを押すと、「セッションデータを削除しました」と表示
  • ブラウザーの戻るボタンを押すと元の画面に戻り、「初めまして」と表示

 

Laravel – Cookie

Cookieの操作

Cookieの取得・初期化

変数 = \Cookie::get('Cookie名', 初期値);

  • Cookie名のCookieの値を変数に代入する
  • Cookie名のCookieが存在しない時は、初期値をセットしてその値を変数に代入する

Cookieの保存

\Cookie::queue('Cookie名', 変数, 保存期限);

  • Cookie名のCookieに変数の値を保存する
  • 保存期限は分単位で設定する

Cookieの削除

\Cookie::queue(\Cookie::forget('Cookie名'));

  • Cookie名のCookieを削除する

実装例

ビュー

以下の内容を含むビューを所定の位置に準備。

  • $countが1なら初訪問の旨を、そうでなければ訪問回数を表示
  • カウンターをクリアするためのボタンを表示

設定・変更アクション

コントローラーに以下のアクションを準備し、ルーティング設定する。

  • countという名前のCookieの値を取得して$countに代入
    • countという名前のCookieがなければ値0で作成して、その値を$countに代入
  • $countの値をインクリメント
  • $countの値を90日期限でCookieに保存
  • $countの値を渡してビューをレンダリング

削除アクション

フォームのカウンタークリアボタンが押されたときのアクションを準備し、ルーティングを設定する。

  • Cookieを削除する
  • 削除した旨を画面に直接表示する

実行結果

  • 最初にアクセスすると、「初めまして」と表示
  • リロードすると「2回目のアクセスです」と表示
  • その後リロードするたびに回数が1つずつ増加
  • カウンタークリアボタンを押すと、「cookieを削除しました」と表示
  • ブラウザーの戻るボタンを押すと元の画面に戻り、「初めまして」と表示