Slim研讀筆記七之應用程序中間件(下)

中間件的壓棧流程並不複雜,柚子心中大概也有個思路,這裏畫出草圖:

中間件在調用時會現獲取最後的中間件(匿名函數對象),然後根據中間件之間的關聯自動進行調用。 

   /**
     * 調用中間件
     * Call middleware stack
     *
     * @param  ServerRequestInterface $request A request object
     * @param  ResponseInterface      $response A response object
     *
     * @return ResponseInterface
     */
    public function callMiddlewareStack(ServerRequestInterface $request, ResponseInterface $response)
    {
        if (is_null($this->tip)) {
            $this->seedMiddlewareStack();
        }
        /** @var callable $start */
        // 取出棧頂元素(閉包),取的過程要鎖棧,取出之後再打開
        // 鎖棧的過程是不可增加中間件的

        // 調用過程也是從tip,最後那個中間件開始調用
        $start = $this->tip;
        $this->middlewareLock = true;
        $response = $start($request, $response);
        $this->middlewareLock = false;
        return $response;
    }
}

若想了解更加具體調用過程,依舊需要在使用的時候配合路由來研讀啦。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章