国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

1.4.6關(guān)閉控制器復(fù)用后,afterAction的代替問題

banro512

1.4.6關(guān)閉控制器復(fù)用后,beforeAction 可以簡單的直接使用 ``__construct``` 了

但之前在 afterAction 里的一些操作,要如何替換呢,使用 __destruct 嗎?那在這里如果獲取 Response響應(yīng)內(nèi)容呢?

比如 之前要存儲靜態(tài)html內(nèi)容,在afterAction里可以直接在 afterAction(Request $request, $response)獲取到 $response ,然后保存為html文件即可。

/**
     * 保存純靜態(tài)文件
     */
    public function afterAction(Request $request, $response)
    {
        if (!empty($response->dirpath) && !empty($response->htmlfile)) {
            try {
                // 創(chuàng)建目錄
                !is_dir($response->dirpath) && mkdir($response->dirpath, 0755, true);
                // 保存靜態(tài)文件
                file_put_contents($response->dirpath . '/' . $response->htmlfile, $response->rawBody());
            } catch (\Throwable $e) {
                // 忽略錯(cuò)誤
            }
        }
    }

現(xiàn)在如果關(guān)閉了控制器復(fù)用,不再使用actionHook插件,怎么在 __destruct 里實(shí)現(xiàn)呢?還是得使用中間件來實(shí)現(xiàn)吧,這種需求也就不必要關(guān)閉復(fù)用,放棄actionhook了

1292 2 0
2個(gè)回答

ichynul

感覺當(dāng)前對這個(gè)acion的前置和后置處理不合適,導(dǎo)致復(fù)用控制器與否,框架走了不同的腦回路。
應(yīng)該統(tǒng)一,一下,放到框架層面處理前置和后置。

$call[0] = static::container($plugin)->get($call[0]);
$controller = $call[0];
$action = $call[1];

if(method_exists($controller),'beforeAction')
{
    $controller->beforeAction();//執(zhí)行前置方法
}
$controller->$action(...$args);//執(zhí)行對應(yīng)方法
if(method_exists($controller),'afterAction')
{
    $controller->beforeAction();//執(zhí)行后置方法
}

//即保證了執(zhí)行順序,又無關(guān)控制器是否復(fù)用。
//控制器是否復(fù)用任然保留,作用僅局限與自動(dòng)釋放控制器里面的資源。

1、復(fù)用控制器的情況下,actionHook的中間件執(zhí)行順序問題無解,但又沒有拿出完美的可行方案,讓關(guān)閉控制器復(fù)用,但又保留可以配置為復(fù)用控制器。
2、不復(fù)用控制器復(fù)用的情況下,其實(shí)也不太方便,__construct、__destruct的執(zhí)行也講時(shí)機(jī),比如說__destruct不是本次執(zhí)行就立刻調(diào)用,而是要下次請求進(jìn)來重新new,舊的控制器才銷毀調(diào)用__destruct。這就導(dǎo)致你只可以在__destruct銷毀控制器里面的資源,如果你想銷毀其他地方的靜態(tài)資源,可能與你想的不一樣(順序)。

  • walkor 2022-09-21

    1、“復(fù)用控制器的情況下,actionHook的中間件執(zhí)行順序問題無解” 執(zhí)行順序有什么問題?
    2、1.4版本不復(fù)用控制器時(shí),__destruct 會在請求結(jié)束后立刻執(zhí)行

  • ichynul 2022-09-21

    中間件執(zhí)行順序問題,就是使用其他中間件做權(quán)限驗(yàn)證,執(zhí)行beforeAction時(shí)可能那個(gè)驗(yàn)證的中間件還沒執(zhí)行,如果在beforeAction做一些操作依賴于權(quán)限驗(yàn)證結(jié)果,就會有問題。這就導(dǎo)致很難配合,要么在自己寫的中間件完成所有的東西,要么把權(quán)限驗(yàn)證的邏輯放在beforeAction里面。__destruct 這個(gè)我試了沒問題了。

  • walkor 2022-09-21

    中間件按照配置順序執(zhí)行的,權(quán)限中間件放在最前面就行了吧

walkor 打賞

__destruct 無法獲得響應(yīng),如果你想獲得響應(yīng),需要使用中間件。
你可以繼續(xù)使用action-hook,action-hook在webman 1.4下必須開啟控制器復(fù)用才能生效

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??