Slim框架學習筆記之Hooks

1.概述

Slim應用程序提供了一組掛鉤,您可以在其中註冊自己的回調。

什麼是鉤子?

“掛鉤”是Slim應用程序生命週期中的一個時刻,在該時刻將調用分配給掛鉤的可調用優先級列表。鉤子由字符串名稱標識。

“可贖回”是什麼,返回true了is_callable()。可調用分配給鉤子,並在調用鉤子時調用。如果為單個掛鉤分配了多個可調用對象,則按指定的順序調用每個可調用對象。

2.如何使用

使用Slim應用程序的hook()方法將一個callable分配給一個鉤子:

$app = new \Slim\Slim();

$app->hook('the.hook.name', function () {

//Do something

});

第一個參數是鉤子名稱,第二個參數是可調用的。每個鉤子都保持已註冊的callables的優先級列表。默認情況下,分配給掛鉤的每個可調用對象的優先級為10.您可以通過傳遞整數作為方法的第三個參數來為可調用對象提供不同的優先級hook():

$app = new \Slim\Slim();

$app->hook('the.hook.name', function () {

//Do something

}, 5);

上面的示例為可調用項分配優先級5。當調用鉤子時,它將按優先級(升序)對分配給它的所有可調用對象進行排序。優先級為1的可調用對象將在優先級為10的可調用對象之前調用。

鉤子不會將參數傳遞給他們的callables。如果callable需要訪問Slim應用程序,您可以使用use關鍵字或Slim應用程序的靜態getInstance()方法將應用程序注入回調:

$app = new \Slim\Slim();

$app->hook('the.hook.name', function () use ($app) {

// Do something

});

3.默認

這些是在Slim應用程序中始終調用的默認掛鉤。

slim.before

在運行Slim應用程序之前和打開輸出緩衝之前調用此掛鉤。在Slim應用程序生命週期中,此掛鉤將被調用一次。

slim.before.router

在打開輸出緩衝之後和調度路由器之前調用此掛鉤。在Slim應用程序生命週期中,此掛鉤將被調用一次。

slim.before.dispatch

在調度當前匹配路由之前調用此掛接。通常這個鉤子在Slim應用程序生命週期中只調用一次; 但是,如果匹配路由選擇傳遞給後續匹配路由,則可以多次調用此掛鉤。

slim.after.dispatch

在調度當前匹配路由後調用此掛接。通常這個鉤子在Slim應用程序生命週期中只調用一次; 但是,如果匹配路由選擇傳遞給後續匹配路由,則可以多次調用此掛鉤。

slim.after.router

在調度路由器之後,在將響應發送到客戶端之前以及關閉輸出緩衝之後調用此掛接。在Slim應用程序生命週期中,此掛鉤將被調用一次。

slim.after

關閉輸出緩衝後和將響應發送到客戶端後調用此掛鉤。在Slim應用程序生命週期中,此掛鉤將被調用一次。

4.Custom

可以在Slim應用程序中創建和調用自定義掛鉤。當調用自定義鉤子時applyHook(),它將調用分配給該鉤子的所有可調用對象。這正是Slim應用程序的默認掛鉤工作方式。在這個例子中,我應用了一個名為“my.hook.name”的自定義鉤子。之前為此掛鉤註冊的所有可調用項都將被調用。

$app = new \Slim\Slim();

$app->applyHook('my.hook.name');

當您運行上面的代碼時,先前分配給鉤子“my.hook.name”的任何可調用項將按優先級順序(升序)調用。

您應該在應用掛鉤之前將callables註冊到掛鉤。可以這樣想:當你調用Slim應用程序的applyHook()方法時,你要求Slim調用已經為該鉤子名稱註冊的所有callables。


分享到:


相關文章: