フックの拡張
拡張アプリでのフックの拡張の仕方を見ていきます。名前空間・クラス名に気をつけましょう。
ファイル名は任意ですが、わかりやすくする為、Hook.php とします。
例: extension/plugins/SamplePlugin/Hook.php
<?php
namespace Acms\Plugins\SamplePlugin;
class Hook
{
/**
* 例: グローバル変数の拡張
*
* @param array &$globalVars
*/
public function extendsGlobalVars(&$globalVars)
{
$globalVars->set('SAMPLE', 'サンプルのグローバル変数です');
}
}ServiceProviderの設定
これだけでは、通常の拡張方法と違い動作しません。動作させるためには、このクラスのオブジェクトをa-blog cmsに登録する必要があります。
ServiceProviderでHook実装クラスを登録する
拡張アプリの基本で作成した ServiceProviderに少し手を加えます。
<?php
namespace Acms\Plugins\SamplePlugin;
use ACMS_App;
use Acms\Services\Common\HookFactory;
class ServiceProvider extends ACMS_App
{
/* 省略... */
/**
* サービスの初期処理
*/
public function init()
{
$hook = HookFactory::singleton();
$hook->attach('SampleHook', new Hook);
}
/* 省略... */
}ポイント
Acms\Services\Common\HookFactory のオブジェクトを
HookFactory::singleton();
で取得して 先ほど作成した Acms\Plugins\SamplePlugin\Hook を attach します。
- 第一引数: 被らないような任意の文字列
- 第2引数: 実装クラスのオブジェクト
これで拡張アプリをインストールすれば、Hook.php で実装したHookが利用できるようになります。
※ 拡張アプリの Hook も、config.server.php で define('HOOK_ENABLE', 1); になっているときだけ呼ばれます(既定は 0)。HOOK_ENABLE が 0 のときは、attach してもエラーにならず、何も起きません。
Hook の init / beforeAuthenticate / afterAuthenticate / restrictionAuthority / customRuleValue は、拡張アプリの ServiceProvider::init() より前に呼ばれるため、拡張アプリの Hook クラスに書いても呼ばれません。これらが必要な場合は、extension/acms/Hook.php に書いてください。
なお、Hook の init と ServiceProvider の init は別のものです。