phpBBex-クラスのオートロードとAJAX要求ハンドラーを追加します

phpBBexロゴ phpBBexは、Habbで以前発表された phpBB 3の拡張バージョンです。 プロジェクトは徐々に発展しており、新しい有用な機会が現れています。 本日、公式フォーラムがあり、フォークの新しいバージョンがリリースされました。



ご存知のように、phpBB 3コードは2002年に廃止されました。 ここではすべてが以前と同じです。 複雑な抽象化はなく、コードはシンプルで線形です。 小さなプロジェクトの場合、これは問題ではありません。 しかし、エンジンは機能性に溢れすぎており、膨大な量のコードを変更して、目的の結果を得るのは必ずしも容易ではありません。 現代のパターンを無視すると、さらなる開発が妨げられます。 phpBB開発者が古いmodとのコードの互換性を監視することが重要であることは明らかであるため、大きなアーキテクチャの改善は期待できません。 状況から抜け出す方法は、Symfony 2に基づくphpBB 4であるはずですが、まだ開発を始めていません。 明らかに、そのようなモンスターを書き換えることはそれほど簡単ではないので、近い将来には奇跡はありません。



インターフェースのAJAXへの変換に関連してphpBBexで多くの変更が計画されているため、新しいAJAX要求ハンドラーを追加するための便利なメカニズムを実装することは論理的です。 今日のphpBBの標準的な方法は、変更ごとに独自のロジックを持つphpファイルをルートに作成することです。 そうではありません。 コントローラのようなものを追加しようとしました。 ハンドラーは「コントローラークラス」にグループ化され、必要な「コントローラー」のインスタンスを作成して対応するハンドラーを呼び出す単一のエントリポイントがあります。 これに基づいて、コメントを匿名で評価するシステムを作成しました(ほぼHabréと同様)。



クラスのスタートアップ



そして、私たちは始めます-最初から。 クラスの自動ロードは、非常に簡単に追加できる便利な機能の1つです。 私たちがやった。 オートローダークラス( ソースコード )は非常にシンプルで移植性があり、他のプロジェクトで使用できます。 PHP 5.2以降が必要です。



使用例:

require('./classes/autoloader.php'); //      autoloader::init('./classes/'); // ,       autoloader::add_path('./modules/', 'module'); //        module_
      
      





クラスファイル検索スキームは、いくつかの革新的な点を備えた非常に一般的なものです。 検索は、クラスを含む一般的なディレクトリ、または特別なディレクトリで実行されます(クラス名にmodule_などの特別なプレフィックスがある場合)。 1つのプレフィックスには、多くの一般的なディレクトリと特別なディレクトリがあります。 静的なadd_pathメソッドを使用してパスを追加する順序を回避します。



ファイルパス内のクラス名の逆参照は次のとおりです。 ロードされたクラスの名前は「_」で区切られます(この場合、チェックされたプレフィックスは破棄されます)。 次に、クラス名の受信部分に一致する名前のディレクトリが検索されている間に、パスが次のように生成されます:part1 / part2 / part3 /。 サブディレクトリが終了した場合、残りはファイル名として使用されます(たとえば、db_select_queryクラスは/classes/db/select/query.phpファイルに対応する場合があります)。 さらに、他のオートローダーとは異なり、「_」を介してマージされるいくつかの部分が残っている可能性があります(前の例では、選択ディレクトリが存在しない場合、ディレクトリがない場合はファイル/classes/db/select_query.phpが使用されますdb、/ classes / db_select_query.phpを取得します)。 すべての部分がディレクトリ名として使用された場合、最後のディレクトリの名前と一致する最後の部分がファイル名として使用されます(たとえば、dbディレクトリがある場合、dbクラスは/classes/db/db.phpファイルに対応します)。



サービスクラス



オートローダーが登場したので、便利な機能を備えた小さなクラスライブラリを作成しないのは愚かなことです。 クラス arr(配列の処理)、str(文字列の処理)、request(要求データの処理)、response(応答の形成)、cookie(cookieの処理)が実装されました 。 phpBBで人間のURLを作成および構成するために、独自のルーター(ルートクラス)も実装しました。 残念ながら、まだ関与していません。 しかし、将来的には、すべてがそうなることを願っています。 これらのクラスの詳細なドキュメントも計画されています。 クラス、メソッド、および変数に名前を付けるときは、phpBBエンコード標準が使用されます(どこでも小文字、区切り文字としてアンダースコア)。



AJAX要求ハンドラーの実装



phpBBにはモデルがなく、ハンドラーがデータを直接操作するため、現代のシステムでは通常「コントローラー」と呼ばれるものを「モジュール」と呼びます。 おそらく、これはphpBB 3を根絶する方法ではありません。



すべてのモジュールはモジュールディレクトリにあり、モジュールクラス名はmodule_somethingの形式です。 モジュールが実行できる各アクションは、プレフィックス「action_」を持つメソッドです。 現時点では、これはAJAXリクエストの処理にのみ使用されるため、 ajax.phpファイルはモジュールリクエストのエントリポイントとなり、モジュールとアクションのパラメーターを受け取り、制御をコアクラスに転送します。 コアクラスはリクエストされたモジュールをロードし、必要なアクションを実行します



メッセージの評価



私は本当にビジネスで新しいクラスを試してみたかったです。 メッセージレーティング機能を実装することは、これを行う絶好の機会です。 1つのクラス 、いくつかのメソッド-そして、ここに結果があります!



外観:



設定:





プラスの数、プラスの数などを取得した統計 カウントされ、テンプレート変数で使用できますが、デフォルトではどこにも表示されません。 これは意図的に行われたため、評価はフォーラムの雰囲気に中立的な影響を与え、ユーザーはこの指標を「チート」しようとしませんでした。 しかし、誰かが同意しない場合-必要に応じて、すべての数字を印刷するのは簡単です。



次は?



開発されたルーターは、結果のモジュールシステムにボルトで固定され、唯一のindex.phpファイルがエントリポイントになります。 viewtopic.phpなどの既存のスクリプトはすべて、対応するモジュールのアクションの形式で発行されます。 その結果、フォーラム上の美しいURLの外観をカスタマイズするための柔軟なシステムができました。



All Articles