【FuelPHP】セッションをDBで管理
概要
データベースでセッション管理するための設定をしていきます。
管理方法はいくつかありますが、今回はデータベースで管理します。
1.設定
セッションクラスは、 fuel/core/config/session.php 設定ファイルで設定されています。
そのファイルをコピーして、fuel/app/config/ 配下にコピーします。
この設定で上書きが可能になります。
2.設定ファイルの修正
<?php return array( // cookieからdbに変更 'driver' => 'cookie', → 'db',
3.セッション管理用のテーブルを作成
次のoilコマンドをターミナル上で入力します。
$ php oil r session:create
セッションを管理するためのテーブルが自動で作成されます。
生成されるテーブル定義
CREATE TABLE `sessions` ( `session_id` varchar(40) NOT NULL, `previous_id` varchar(40) NOT NULL, `user_agent` text NOT NULL, `ip_hash` char(32) NOT NULL, `created` int(10) unsigned NOT NULL, `updated` int(10) unsigned NOT NULL, `payload` longtext NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以上でセッションがデータベースで管理されるようになりました。
【FuelPHP】Presenterでtemplateを利用
概要
PresenterでTemplateを利用します。
Templateの利用方法は以下の記事を参考にしてみて下さい。
wakuwakupush.hatenablog.com
コントローラーにファイルを作成して、Templateを継承します。
<?php class Controller_Welcome extends Controller_Template { public function action_index() { $this->template->title = 'title'; $this->template->content = Presenter::forge('welecome/index'); } }
Templateのプロパティ$This->templateはViewインスタンスになります。
結果、Templateの中に、Presenterを通して、welecome/indexの内容が埋め込まれます。
【FuelPHP】Templateを利用して、Viewの共通テンプレートを作成
概要
FuelPHPのTemplateを利用して、Viewのヘッダー、フッターなどの共通テンプレートを作成します。
コンテンツはアクション毎に変更をします。
1.テンプレートを作成
\fuelphp\fuel\app\views\ 配下にテンプレート用のファイル(template.php)を作成します。
<!DOCTYPE html> <html> <head> </head> <body> <header> // header.phpファイルを読み込む <?php echo $header; ?> </header> <main> // 各アクションの内容を読み込む <?php echo $content; ?> </main> <footer> // footer.phpファイルを読み込む <?php echo $footer; ?> </footer> </body> </html>
2.ヘッダー、フッター用のテンプレートを作成
\fuelphp\fuel\app\views\ 配下にフォルダを作成して、ヘッダー、フッター用のテンプレートを作成します。
\fuelphp\fuel\app\views\parts\header.php
\fuelphp\fuel\app\views\parts\footer.php
// header.php <div> <?php echo 'ヘッダー表示'; ?> </div>
// footer.php <div> <?php echo 'フッター表示'; ?> </div>
3.共通Controllerを作成
Controller_Templateを継承したController_Baseを作成します。
今後、ここで共通なものを一箇所にまとめることができます。
\fuel\app\classes\controller\ 配下にbase.phpを作成します。
<?php class Controller_Base extends Controller_Template { public function before() { // テンプレートを動作させるために必要 parent::before(); //header.phpをテンプレートの$headerとbindさせる。 $this->template->header = View::forge('parts/header'); //footer.phpをテンプレートの$footerとbindさせる。 $this->template->footer = View::forge('parts/footer'); } public function after($response) { // 自身のレスポンスオブジェクトを作成する場合は必要なし $response = parent::after($response); // after() は確実に Response オブジェクトを返すようにする。 return $response; } }
4. Controller_Baseを継承したコントローラーを作成
\fuel\app\classes\controller\ 配下にwelcome.phpを作成します。
<?php class Controller_Hello extends Controller_Base { public function action_index() { //template.phpのcontentとアクション毎のviewをbindさせる $this->template->content = View::forge('welcome/index'); } }
【FuelPHP】Sessionクラスの使い方
Sessionクラス
FuelPHPには、Sessionクラスが用意されています。
リクエスト時に削除されるような一時的なセッション(フラッシュセッション)の発行も可能です。
設定ファイル
セッションクラスは、 fuel/core/config/session.php 設定ファイルで設定されています。
既にデフォルト設定が入力されていますが、必要に応じて設定を修正したい場合は、
fuel/app/config/ 配下にファイルをコピーして設定を修正することで上書きされます。
セッションの読み書き
set()メソッド
第1引数に変数名、第2引数に値を指定します。値には配列の指定も可能です。
例
// 文字列を指定 Session::set('user_id', 'id_1'); // 配列を指定 Session::set('login', array('user' => $user_id, 'hash' => $login_hash));
get()メソッド
set()メソッドで保存したセッションデータは、get()で同じ変数名を指定することで値の取得が可能です。
例
// セッションデータを取得 $user_id = Session::get('user_id'); // SimpleAuthのログイン情報を取得 $username = Session::get('username'); $login_hash = Session::get('login_hash');
get()に引数を指定しない場合は、現在セッションに保存されているデータを全て取得します。
// 全セッションデータを取得 $sess_data = Session::get();
フラッシュセッション
フラッシュセッションとは、次のリクエスト時に自動的に削除されるセッションデータのことです。
フラッシュセッションの読み書きは、set_flash()、get_flash()を用いて行います。
引数の指定方法はset()、get()メソッドと同様になります。
- keep_flash()
フラッシュセッションを読み込まれていない状態に戻します。フラッシュセッションの寿命を次のリクエストまで伸ばします。
// 引数はフラッシュセッションの伸ばしたい変数名 Session::keep_flash('target');
削除、破棄
セッション変数を削除する場合は、delete()、delete_flash()を使用します。
引数には、削除したい変数名を指定します。
// user_idという名前のセッションデータを削除 Session::delete('user_id'); // targetという名前のフラッシュセッションを削除 Session::delete_flash('target');
セッション自体を破棄する場合は、Session::destroy()を使用します。
セッションIDの変更と取得
セッションIDはSessionクラスの設定で自動的に変更がされますが、明示的に行いたい時にはSession::rotate()メソッドを使用します。
// セッションIDを変更 Session::rotate();
セッションIDの取得にSession::key()を使用します。
$sess_id = Session::key();
【FuelPHP】Ormでリレーション設定をした表からデータ取得
Ormモデルでリレーションの設定ができていない場合は、下記の記事を参考にしてみて下さい。
wakuwakupush.hatenablog.com
1.データを取得
Ormモデルでリレーション設定をした表をfind()メソッドを利用して、データを取得します。
コントローラー上で、次のように記述します。
<?php // 全件取得 $data = Model_Shop_data::find('all', array( 'related' => array( 'shop_photos', // リレーションの設定名を指定 ), ));
結果は、2テーブルからデータを取得します。返り値はオブジェクト形式です。