action-hook插件

v1.0.2
版本
2022-09-06
版本更新時間
4738
安裝
5
star
簡介
在傳統(tǒng)框架中,每個請求都會實例化一次控制器,所以很多開發(fā)者__construct()
方法中做一些請求前的準(zhǔn)備工作。
而webman由于控制器常駐內(nèi)存,無法在__construct()
里做這些工作。此插件提供了更好的解決方案beforeAction() afterAction(),它不僅讓開發(fā)者可以介入到請求前的流程中,而且還可以介入到請求后的處理流程中。
特別注意
webman>=1.4.0,不需要安裝此插件,可以在config/app.php
里設(shè)置'controller_reuse' => false
關(guān)閉控制器復(fù)用,讓每個請求都重新初始化控制器,這樣每個請求都會執(zhí)行控制器的__construct()
方法。
webman>=1.4.0時,在關(guān)閉控制器復(fù)用的情況下,本插件將無法使用。注意
插件需要webman>=1.2,如果你的版本低于1.2可以參考這里手動配置action-hook
安裝
composer require webman/action-hook
使用
<?php
namespace app\controller;
use support\Request;
class Index
{
/**
* 該方法會在請求前調(diào)用
*/
public function beforeAction(Request $request)
{
echo 'beforeAction';
// 若果想終止執(zhí)行Action就直接返回Response對象,不想終止則無需return
// return response('終止執(zhí)行Action');
}
/**
* 該方法會在請求后調(diào)用
*/
public function afterAction(Request $request, $response)
{
echo 'afterAction';
// 如果想串改請求結(jié)果,可以直接返回一個新的Response對象
// return response('afterAction');
}
public function index(Request $request)
{
return response('index');
}
}
beforeAction說明
- 在當(dāng)前控制器被執(zhí)行前調(diào)用
- 框架會傳遞一個
Request
對象給beforeAction
,開發(fā)者可以從中獲得用戶輸入 - 如需終止執(zhí)行當(dāng)前控制器,則只需要在
beforeAction
里返回一個Response
對象,比如return redirect('/user/login');
- 無需終止執(zhí)行當(dāng)前控制器時,不要返回任何數(shù)據(jù)
afterAction說明
- 在當(dāng)前控制器被執(zhí)行后調(diào)用
- 框架會傳遞
Request
對象以及Response
對象給afterAction
,開發(fā)者可以從中獲得用戶輸入以及控制器執(zhí)行后返回的響應(yīng)結(jié)果 - 開發(fā)者可以通過
$response->rawBody()
獲得響應(yīng)內(nèi)容 - 開發(fā)者可以通過
$response->getHeader()
獲得響應(yīng)的header頭 - 開發(fā)者可以通過
$response->getStatusCode()
獲得響應(yīng)的http狀態(tài)碼 - 開發(fā)者可利用
$response->withBody()
$response->header()
$response->withStatus()
串改響應(yīng),也可以創(chuàng)建并返回一個新的Response
對象替代原響應(yīng)
特別注意
aciton-hook是基于中間件開發(fā)的,action-hook會注冊一個全局中間件,根據(jù)中間件執(zhí)行順序,action-hook中間件會優(yōu)先于你的應(yīng)用中間件執(zhí)行,這可能與開發(fā)者預(yù)期不符,解決辦法是手動將/config/plugin/action-hook/middleware.php中的中間件配置移動到config/middleware.php的對應(yīng)的應(yīng)用中間件配置末尾。