独自のフレームワーク用のプラグイン アーキテクチャを作成する方法を考えようとしています。私は数多くのトピックを読み、ここや他のサイトに投稿しました。そして基本的に、PHPで唯一の適切なオプションと思われる次のソリューションにたどり着きました(現在)。
アイデアは、すべてのクラスがある種のオブザーバーのようなクラスを拡張するということです。そのため、Template クラス、BaseController などは常に Plugin クラスを拡張します。
class BaseController extends Plugin
{
public function __construct()
{
// Plugin check, notify all loaded plugins
$this->checkForEarlyHooks();
// Init some standard stuff
$this->view = new Template();
$this->baseLayout = 'layout.html';
$this->something = new Something();
// Plugin check, notify all loaded plugins
$this->checkForLateHooks();
}
}
つまり、ここで基本的に起こることは、indexController が baseController を拡張するときにプラグイン チェックが行われるということです。この場合、コンストラクターの場合。これは、アクション メソッドが実際に呼び出される前に、プラグインで何らかのログイン チェックを行いたい場合に便利です。
Plugin クラスは、呼び出されたクラスから解決でき、ロードされたプラグインで検索する関数を認識します。
また、ロードされたプラグイン リストを 2 回チェックすることにも注意してください。1 つはコンストラクターで何かがロードされる前 (早い段階) で、もう 1 つはすべての変数がロードされるとき (遅い段階) です。
「checkForLateHooks()」関数に変数を追加することもできます。そのため、「baseLayout」変数のように、フック関数もそれらを操作できます。
フック関数は次のようになります。
public function hookConstruct ( &$baseLayout )
{
$baseLayout = 'login.html';
}
基本的に私の質問は、このアプローチは良いですか? おそらく他にも多くの方法があることを私は知っています。しかし、私は主に、後で設計上の問題に遭遇したくありません。今は良いアイデアのように思えますが、後でどうなるかはわかりません...
(私が読んだすべての投稿から)それを正しく覚えていれば、これはWordPress(および他のフレームワーク)が行うようなものです。