Slim研读笔记七之应用程序中间件(上)

柚子以为,面对未知问题的求证过程应是:

  • 首先,根据问题大量大胆猜测,幻想可能的答案。
  • 然后,一步步精确的求证。不急功近利,不以偏概全,而应环环相扣,循序渐进。
  • 之后,根据大量事实总结出客观规律。方可达到知其然且知其所以然。 


通过文档可知,Slim包含三种中间件,应用程序中间件、路由中间件、中间件组等。
应用程序中间件示例,在index.php中: 

$app->add(function ($request, $response, $next) {
    $response->getBody()->write("11");
    $response = $next($request, $response);
    $response->getBody()->write('aa');

    return $response;
});
这节,我们延续上节进行Slim之应用主体中间件部分的源码研读。这里对中间件回调函数进行了标准化处理。让我们查看该解析类。 
class DeferredCallable
{
    use CallableResolverAwareTrait;

    private $callable;
    /** @var  ContainerInterface */
    private $container;

    /**
     * DeferredMiddleware constructor.
     * @param callable|string $callable
     * @param ContainerInterface $container
     */
    public function __construct($callable, ContainerInterface $container = null)
    {
        $this->callable = $callable;
        $this->container = $container;
    }

    // 以调用函数的方式调用对象时,该魔术方法自动调用
    public function __invoke()
    {
        $callable = $this->resolveCallable($this->callable);
        if ($callable instanceof Closure) {
            $callable = $callable->bindTo($this->container);
        }

        $args = func_get_args();

        return call_user_func_array($callable, $args);
    }
}






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