質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

Q&A

解決済

1回答

2389閲覧

Slim Framework v3 のCookie利用について

bananacoffee

総合スコア260

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

0グッド

0クリップ

投稿2017/05/30 09:28

###前提・実現したいこと
Slim Framework v3を使い始めてみたのですが、Cookieを保存が上手く行かず、画面遷移をすると消えてしまいます。
FIG Cookieを利用しています。

###発生している問題・エラーメッセージ
/makecookie/ のdump

object(Dflydev\FigCookies\Cookie)#56 (2) { ["name":"Dflydev\FigCookies\Cookie":private]=> string(5) "theme" ["value":"Dflydev\FigCookies\Cookie":private]=> string(4) "blue" }

/getcookie/ のdump

object(Dflydev\FigCookies\Cookie)#48 (2) { ["name":"Dflydev\FigCookies\Cookie":private]=> string(5) "theme" ["value":"Dflydev\FigCookies\Cookie":private]=> NULL }

###該当のソースコード

PHP

1<?php 2require __DIR__ . '/slim/vendor/autoload.php'; 3use Dflydev\FigCookies\Cookie; 4use Dflydev\FigCookies\FigRequestCookies; 5 6$app = new \Slim\App(); 7 8// Cookie保存 9$app->get("/makecookie/", function($request, $response, $args) { 10 $request = FigRequestCookies::set($request, Cookie::create('theme', 'blue')); 11 $cookie = FigRequestCookies::get($request, 'theme'); 12 var_dump($cookie); 13}); 14 15// Cookie取得 16$app->get("/getcookie/", function($request, $response, $args) { 17 $cookie = FigRequestCookies::get($request, 'theme'); 18 var_dump($cookie); 19}); 20// Run app 21 22$app->run();

###試したこと
同マニュアルにあるResponse Cookiesを利用しても同じ状況でした。
SlimおよびPSR-7の理解が追いついておらず見当違いな事をしているかもしれません。

何かしらヒント、アドバイスをいただけると嬉しいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

検討違いな回答かもしれませんが、ご参考になれば幸いです。

PSR-7をざっくりと説明しますと、クライアントから受け取ったデータがrequestです。
そして、クライアントに渡すデータをresponse(bodyやらstatus code等)に設定します。

ですので、responseにcookieを設定し、クライアントに返す必要があります。
以下のようなソースになると思います。(一応、動作することを確認しました。)

php

1<?php 2require __DIR__ . '/slim/vendor/autoload.php'; 3//use Dflydev\FigCookies\Cookie; 4use Dflydev\FigCookies\SetCookie; // SetCookieへ変更 5use Dflydev\FigCookies\FigRequestCookies; 6use Dflydev\FigCookies\FigResponseCookies; // 追加 7 8$app = new \Slim\App(); 9 10// Cookie保存 11$app->get("/makecookie/", function($request, $response, $args) { 12 //$request = FigRequestCookies::set($request, Cookie::create('theme', 'blue')); 13 //$cookie = FigRequestCookies::get($request, 'theme'); 14 15 // ResponseにCookieをセットします 16 $response = FigResponseCookies::set($response, SetCookie::create('theme') 17 ->withValue('blue')->withPath('/') 18 ); 19 20 //var_dump($cookie); 21 // クライアントにResponseを渡します 22 return $response->getBody()->write("Cookie Set !"); 23 24}); 25 26// Cookie取得 27$app->get("/getcookie/", function($request, $response, $args) { 28 // Requestにcookieが設定されますのでこちらはそのままで 29 $cookie = FigRequestCookies::get($request, 'theme'); 30 var_dump($cookie); 31}); 32// Run app 33 34$app->run();

投稿2017/05/31 09:08

編集2017/05/31 10:33
s-washion

総合スコア204

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bananacoffee

2017/05/31 10:53

回答ありがとうございます! なるほど、responseを返す必要があったのですね。 そのままでは取得できなかったのですが、set側に ->withPath('/') を追記することで無事に確認できました。 ありがとうございます。
s-washion

2017/06/01 00:36

解決されたようでよかったです! すいません。URLが変わるので「->withPath('/')」が必要でしたね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問