1
REGISTRY add() + collect()
プラグインがリストに項目を追加します。コアが「送信ドライバを持っているのは誰?」と問い合わせると、あなたのプラグインが「私が持っています」と応答します。
Hook::add('register_sending_server_driver', fn () => [
'type' => 'myvendor-foo',
'driver' => \MyVendor\Foo\Driver::class,
]);
$drivers = Hook::collect('register_sending_server_driver');
2
EVENT on() + fire()
プラグインが発生した事象に反応します。戻り値は破棄されます。
Hook::on('customer_added', function ($customer) {
LoyaltyPoints::award($customer, 100, 'welcome');
});
Hook::fire('customer_added', [$customer]);
3
BEHAVIOR set() + perform()
プラグインがコアロジックの一部を完全に置き換えます。一つの挙動は一つのプラグインしか主張できず、競合すれば即座に例外が投げられます。
Hook::set('dispatch_list_import_job',
fn ($list, $f) => new MyFasterImportJob($list, $f));
Hook::setIfEmpty('dispatch_list_import_job',
fn ($list, $f) => new DefaultImportJob($list, $f));
$job = Hook::perform('dispatch_list_import_job', [$list, $f]);
dispatch($job);
4
FILTER modify() + filter()
プラグインがコールバックチェーンを通じて値を変換します。各コールバックは現在の値を受け取り、変更後の値を返します。
Hook::modify('sidebar-menu-items', function (array $items) {
$items[] = [
'label' => 'Loyalty',
'url' => route('lp.dashboard'),
];
return $items;
});
$menu = Hook::filter('sidebar-menu-items', $defaultMenu);