いろいろPHP~備忘録~

WEBエンジニアによる記録

勉強になったことを記録

【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');
    }
}

5.Viewファイルを作成

\fuelphp\fuel\app\views\ 配下にフォルダを作成して、index.phpを作成します。

\fuelphp\fuel\app\views\welcome\index.php

<div>
  メインコンテンツ
</div>


以上で、Viewのヘッダー、フッターなどの共通テンプレートの作成は完了です。
また、アクション毎にコンテンツの変更が可能になりました。

【FuelPHP】Sessionクラスの使い方

Sessionクラス

FuelPHPには、Sessionクラスが用意されています。
リクエスト時に削除されるような一時的なセッション(フラッシュセッション)の発行も可能です。

設定ファイル

セッションクラスは、 fuel/core/config/session.php 設定ファイルで設定されています。
既にデフォルト設定が入力されていますが、必要に応じて設定を修正したい場合は、
fuel/app/config/ 配下にファイルをコピーして設定を修正することで上書きされます。

リファレンス
Session 設定 - クラス - FuelPHP ドキュメント

セッションの読み書き

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()メソッドと同様になります。

フラッシュセッションを読み込まれていない状態に戻します。フラッシュセッションの寿命を次のリクエストまで伸ばします。

// 引数はフラッシュセッションの伸ばしたい変数名
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テーブルからデータを取得します。返り値はオブジェクト形式です。

詳しくはリファレンス
はじめに - Relations - Orm パッケージ - FuelPHP ドキュメント

【FuelPHP】Ormモデルのリレーションを設定

Ormパッケージを利用する場合は、先にOrmパッケージの設定を行って下さい。
wakuwakupush.hatenablog.com

FuelPHPでは、リレーションタイプが4種類あります。
・Belongs To
・Has One
・Has Many
・Many to Many

今回は、「Belongs To」と「Has Many」のみを利用します。

参考
はじめに - Relations - Orm パッケージ - FuelPHP ドキュメント

1.Ormモデルとテーブルの用意

今回はoilコマンドを利用して、「users」「phones」のOrmモデル、テーブルを自動生成します。

wakuwakupush.hatenablog.com

コマンドライン上で、次のコマンドを入力します。

$ php oil g model users name:varchar[50]
$ php oil g model phones user_id:int number:varchar[20]

「users」「phones」のモデル、マイグレーションが自動生成されます。
 
次はテーブルを生成します。次のコマンドを入力します。

$ php oil refine migrate

DBにテーブルが作成されていればOKです。

2.レコードの作成

レコードを作成するときは、下記のようにコントローラー内で入力します・

<?php

  // インスタンス
  $user = Model_User::forge();

  // プロパティに値を代入
  $user->name = 'karesansui';

  // DBにinsert
  $user->save();

コントローラにアクセスすると、usersテーブルへの挿入が行われています。

3.リレーションの設定

モデル間の関連性の記述をしていきます。
APPPATH/classes/model/user.php 内でリレーションを設定します。

<?php

  class Model_User extends \Orm\Model
  {
    protected static $_has_many = array(
      'phones' => array(
        'model_to'       => 'Model_Phone',
        'key_from'       => 'id',
        'key_to'         => 'user_id',
        'cascade_save'   => 'true',
        'cascade_delete' => 'true',
    )
  );

次にAPPPATH/classes/model/phone.php 内でリレーションを設定します。

<?php

  class Model_Phone extends \Orm\Model
  {
    protected static $_belongs_to = array(
      'users' => array(
        'model_to'       => 'Model_User',
        'key_from'       => 'user_id',
        'key_to'         => 'id',
        'cascade_save'   => 'true',
        'cascade_delete' => 'false',
    )
  );

リレーションの設定が完了したら、下記のようにコントローラーに記載します。

<?php

  $user = Model_User::find(1);
  $phone = Model_Phone::forge();
  $phone->number = '090-1111-2222';
  $user->phone[] = $phone;
  $user->save();

コントローラにアクセスして、SQLを確認してみると、usersテーブルの更新とphonesテーブルへの挿入が行われています。

下記詳細
はじめに - Relations - Orm パッケージ - FuelPHP ドキュメント

【FuelPHP】Ormパッケージを有効にする設定

Ormとは

データーベースのテーブルレコードとオブジェクトのマッピングや、テーブル間のリレーションを操作するためのパッケージです。Ormに含まれるModelクラスでは、基本的なCRUD用のメソッドも用意されています。

Ormの設定

Ormパッケージを利用するためには、下記ファイルの設定を有効にします。

// app/config/config.php

'always_load' => array(
    'packages' => array(
        'orm',
    ),
),

これでOrmの利用が可能になります。