[PHP-users 23913] PEAR::AuthでSmartyを使う方法

丸山 宏徳 kutsugi @ avis.ne.jp
2004年 12月 15日 (水) 10:43:53 JST


お世話様です、丸山です。
ズバリ%表題%の件、自分でもある程度工夫してみて、先が見えたところで、この
MLで「昔やったよ」という投稿を見つけてorzとなっているところですが(^^;、
「継承してdrawLoginをオーバーライド」という一文を読み、下記のように実装
してみました。こんな考え方でいいのでしょうか? 何か見逃している点があれ
ば御指摘ください。
>USHIRO Kaori様&ALL

……call_user_funcって、静的メソッドは呼べるけどインスタンスメソッドは呼
べないんですよねぇ……(T_T)>PEAR::Auth

出来ればロール制御もしたかったのでPEAR::LiveUserも検討したのですが、まぁ
日本語資料の少ないこと少ないこと、途中で断念しました(T_T)
現在、ストレージドライバに無理矢理ロール認証を乗っけるか、ログインとは分
けて別口でロール認証だけ実装してしまうかを検討中です。

------------------------------------

<?php
//for PHP5
//writen by H.Maruyama
require_once 'Auth/Auth.php';

class smarty_auth extends Auth
{
 //Smartyオブジェクト
 protected $SMARTY_OBJECT;
 //Smarty用テンプレート名
 protected $SMARTY_TEMPLATE;
 //usernameのテンプレート側変数名
 protected $LOGIN_USERNAME_ATTRIBUTE = "username";
 //エラーメッセージ
 protected $LOGIN_MESSAGE = array();
 //エラーメッセージ領域のテンプレート側変数名
 protected $LOGIN_MESSAGE_ATTRIBUTE = "message";

 //コンストラクタ
    function __construct( $storageDriver,    //ストレージドライバ
       $smartyObject = null,  //Smartyオブジェクト(省略可)
       $smartyTemplate = "",  //Smartyテンプレート名
       $options  = '',  //PEAR:Auth用オプション
       $loginFunction = '',  //PEAR:Auth用ログイン関数名
       $showLogin  = true)  //ログインがオプションかどうかの定義(……ふつーTrueだよな(^^;))
 {
  //Smarty関連の設定
  $this->SMARTY_OBJECT = $smartyObject;
  $this->SMARTY_TEMPLATE = $smartyTemplate;

  //ログインメッセージ関係の設定
  $this->LOGIN_MESSAGE[AUTH_EXPIRED]  = "設定されたセッション持続時間が経過ぎました。再度ログインしてください。";
  $this->LOGIN_MESSAGE[AUTH_IDLED]  = "設定された待機時間が経過しました。再度ログインしてください。";
  $this->LOGIN_MESSAGE[AUTH_WRONG_LOGIN] = "ユーザ名もしくはパスワードの誤りです。";

  //基底クラスのコンストラクタを呼び出す
  $this->Auth($storageDriver, $options, $loginFunction, $showLogin);
 }

 //ログイン画面描写
 function drawLogin($username = '')
 {
  //Smartyオブジェクトが設定されていれば、テンプレートからログイン画面を描写
  if($this->SMARTY_OBJECT != null)
  {
   if($this->SMARTY_OBJECT instanceof Smarty)
   {
    $this->SMARTY_OBJECT->assign($this->LOGIN_MESSAGE_ATTRIBUTE, $this->LOGIN_MESSAGE[$this->status]);
    $this->SMARTY_OBJECT->assign($this->LOGIN_USERNAME_ATTRIBUTE, $username);
    $this->SMARTY_OBJECT->display($this->SMARTY_TEMPLATE);
    return;
   }
   else
   {
    //Smartyオブジェクトでなければ、その旨メッセージを表示して通常のログイン画面を描写
                echo '<i>Wrong SmartyObject! Draw default LoginForm.</i>'."\n";
   }
  }
  //通常のログイン画面描写を呼び出す
  parent::drawLogin($username);
 }
}
?>


丸山 宏徳

E-Mail:kutsugi @ avis.ne.jp



PHP-users メーリングリストの案内