まず最初に、値を保存するデータベースを準備します。 このチュートリアルでは、読者はすでに PEAR の DB クラスの基本的な使用法を知っているものとします。
デフォルトのテーブルを準備するには、以下の SQL 文を実行します。
テーブルを準備する SQL
CREATE TABLE `preferences` ( `user_id` varchar( 255 ) NOT NULL default '', `pref_id` varchar( 32 ) NOT NULL default '', `pref_value` longtext NOT NULL , PRIMARY KEY ( `user_id` , `pref_id` ) );
Auth_PrefManager を使用するには、 まず以下のようにして基底オブジェクトのインスタンスを作成しなければなりません。
オブジェクトの作成
<?php
require_once('Auth/PrefManager.php');
$dsn = 'mysql://user:password@localhost/database'; // 環境にあわせて DSN を変更します。
$options = array('serialize' => true); // データを保存する前のシリアライズを有効にします。
// これにより、値が正しい形式で確実に取得できるようになります。
$prefmanager = new Auth_PrefManager($dsn, $options); // オブジェクトを作成します。
?>
PrefManager オブジェクトが出来上がったので、 これを使用して設定を登録してみましょう。
このチュートリアルでは、ユーザが自分の国を指定できるようにします。また、 国を登録しなかったユーザは「地球上のどこか」と設定されるようにします。
まずは setDefaultPref を使用してデフォルト値を設定しましょう。
オブジェクトの設定
<?php
// 例 1 の続きです
$prefmanager->setDefaultPref("country", "地球");
?>
デフォルト値が設定できました。これで、(非常に) 基本的なページを作成することが可能です。 例えばユーザごとにカスタマイズしたメッセージを表示することができます。
現在は、このメッセージは常に "地球のみなさん、こんにちは!" となります。 まだどのユーザも自分の国を設定していないからです。
設定の取得
$username = "guest";
<h1><?=$prefmanager->getPref($username, "country")?>のみなさん、こんにちは!</h1>
最後に、自分が住む国を選択できるようにしなければなりません。
ここでは、単純なテキストボックスを使用します。 もちろん、実際のアプリケーションでは ユーザに設定変更させるのなら もうちょっとしっかり考える必要があるでしょう。
"国をリセット" ボタンは、ユーザ設定を消去してもう一度デフォルト値を表示します。
設定の登録
<h1>国の設定</h1>
// ユーザが、国とユーザ名を登録できるようにします
if (isset($_POST['submit'])) {
$username = htmlspecialchars($_POST['username']);
$prefmanager->setPref($username, 'country', $_POST['country']);
} else if (isset($_POST['reset'])) {
$username = htmlspecialchars($_POST['username']);
$prefmanager->deletePref($username, 'country');
} else {
$username = 'guest';
}
?>
<h1><?=$prefmanager->getPref($username, "country")?>のみなさん、こんにちは!</h1>
<h2>国とユーザ名を設定します</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>">
<label for="username">ユーザ名</label> <input name="username" value="<?=$username?>" /><br/>
<label for="country">国</label> <input name="country" value="<?=$prefmanager->getPref($username, 'country')?>"/><br/>
<input type="submit" name="submit" value="国の設定" /> <input type="submit" name="reset" value="国のリセット" />
</form>
一度ユーザ名と国名を入力すると、ログインするたびに そのユーザ用のメッセージが表示されるようになります。
サンプルのソースコード
<h1>国の設定</h1>
<?php
require_once('Auth/PrefManager.php');
// PrefManager オブジェクトを作成します。
// 環境に合わせて DSN を変更します。
$dsn = 'mysql://user:password@localhost/database';
// データを保存する前のシリアライズを有効にします。
// これにより、値が正しい形式で確実に取得できるようになります。
$options = array('serialize' => true);
// オブジェクトを作成します。
$prefmanager = new Auth_PrefManager($dsn, $options);
// デフォルト値を設定します (スクリプトを実行するたびにこれを行う必要はありません)。
$prefmanager->setDefaultPref("country", "Earth");
// ユーザが、国とユーザ名を登録できるようにします。
if (isset($_POST['submit'])) {
$username = htmlspecialchars($_POST['username']);
$prefmanager->setPref($username, 'country', $_POST['country']);
} else if (isset($_POST['reset'])) {
$username = htmlspecialchars($_POST['username']);
$prefmanager->deletePref($username, 'country');
} else {
$username = 'guest';
}
?>
<h1><?=$prefmanager->getPref($username, "country")?>のみなさん、こんにちは!</h1>
<h2>国とユーザ名を設定します</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>">
<label for="username">ユーザ名</label> <input name="username" value="<?=$username?>" /><br/>
<label for="country">国</label> <input name="country" value="<?=$prefmanager->getPref($username, 'country')?>"/><br/>
<input type="submit" name="submit" value="国の設定" /> <input type="submit" name="reset" value="国のリセット" />
</form>