XCube_ActionFilter (3)
Practice
恐らく、あなたは、
Preload
を使いこなすために XOOPS Cube Legacy
のその他のメカニズムを理解する必要があるでしょう。プリロードは、ほとんどのカスタマイズの起点となります。
しかし、今は Preload
を理解することが、重要です。そこで、 Preload
のみを使用して実例を作成しましょう。それは、 ForceSiteClose
というものです。 ForceSiteClose
は、特定の IP
を除いて全ユーザーのために全ユーザーに対してサイトクローズを行います。それは、テストに便利です、なぜならテスターは特定のIPから来ていれば、ゲストユーザーとしてサイトにアクセスが出来るからです。ForceSiteClose
によって、サイトオーナーは、テストしながら訪問者に対してサイトを閉じることができるのです。
class
ForceSiteClose
extends
XCube_ActionFilter
{
var $mSpecificIPs
=
array('127.0.0.1');
function preFilter()
{
$ip
=
$_SERVER['REMOTE_IP'];
if
(!in_array($ip,
$this->mSpecificmIPs))
{
$this->doSiteClose();
exit();
}
}
function doSiteClose()
{
//
// You must rewrite the
following for your expression.
//
print
"This site
is closed now, Because ...";
}
}
あなたは、データベース障害に際してこのフィルタを使ってもよいでしょう。なぜなら、
ForceSiteClose
は、データベースなしで動くからです。一方、 XOOPS Cube Legacy
のサイトクローズは、データベース障害の下では動きません。
Future XCube_ActionFilter
これは、
ActionFilter に詳しい開発者のための備考です。
Legacy_Controller において、 ActionFilter
機能は、サイトプリロード、及び、モジュールプリロード専用です。つまり、それは、サイト所有者とモジュール開発者がカスタマイズを行うために存在します。Legacy_Controller
は、自身を構築するために ActionFilter 機能を使いません。従って、いくつかのフレームワークの
ActionFilter と Legacy_Controller における ActionFilter
は異なっています。
onokazu 氏は Legacy_Controller がそれ自身を構築するために
ActionFilter
を使うことは、スマートなプログラムであると言いました。彼のアイデアは、まったく正しく、かつ魅力的です。
ActionFilter はシンプルなメカニズムにすぎませんから、 XCube_ActionFilter
のクラス設計は、その用途に十分です。
最終的に、私達は、実例による役割分担の明確化のために Legacy_Controller
のこの設計を保持することにしました。ベースモジュールでコントローラを作るためにあなたがそれを使うことは、自由です。そして、近い将来リリースされるであろういくらかのベースモジュールは、そのような目的のために
ActionFilter を使うかもしれません。
我々が少なくともそのような使用を検討したことを留意してください。