Every Qiita #24
のんびり独学初学者投稿 24日目
今回は・・・
cakePHP4のフォーム値をセッション管理した時の備忘録です。
controllerでセッションを準備する
cakephpではSessioオブジェクトを使って書き込みや読み込みを行います。$this->getRequest()->getSession()
でセッションにアクセスすることができます。
公式ドキュメントではセッションを独自でカスタマイズする方法が載っていますので、近々実装して投稿しようと思います。
public function initialize(): void
{
$session = $this->session = $this->getRequest()->getSession();
$this->set(compact("session"));
}
viewでセッションにアクセスするたびに記述するのが面倒なので、AppControllerのinitializeアクションに変数をセットしておきます。
セッションを管理する
$this->session->read()
:セッションの読み込み
$this->session->write()
: セッションの書き込み
$this->session->destroy()
:セッションの削除
$this->session->check()
:指定のセッションデータが存在しているか確認
基本的に上記のメソッドを使っていきます。
今回は,
前回実装した複数検索で検索内容を保持するためにセッション管理を行なっていきます。
foreach($session_array as $key => $val){
if(!empty($val)){
$this->session->write($key,$val);
}elseif($this->session->check($key)){
$this->session->delete($key);
}
}
$session_arrayにはセッションに入れたい値と任意のキーを連想配列で格納してあります。
- 値があればセッションに格納します
- 値がない場合、前回検索時にデータがあるかを確認し、あれば削除します。(直前の検索内容に更新)
viewに表示する
最後にセッションがあればvalueに設置し完了です。
<?= $this->Form->control('gym_id',["label" => false,"empty"=>"ジムを選択","value"=> $session->read('gym') ?? '']);?>
- formControlの引数にvalueを設定するとhtmlのvalueに変換できます。
- セッションには検索した値のみ格納しているので検索していない箇所はnullで帰ってきます。readメソッドでnullでなければ検索した内容が初期値として設置されます。