柚子以爲,面對未知問題的求證過程應是:
- 首先,根據問題大量大膽猜測,幻想可能的答案。
- 然後,一步步精確的求證。不急功近利,不以偏概全,而應環環相扣,循序漸進。
- 之後,根據大量事實總結出客觀規律。方可達到知其然且知其所以然。
通過文檔可知,Slim包含三種中間件,應用程序中間件、路由中間件、中間件組等。
應用程序中間件示例,在index.php中:
$app->add(function ($request, $response, $next) {
$response->getBody()->write("11");
$response = $next($request, $response);
$response->getBody()->write('aa');
return $response;
});
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);
}
}