Slim 框架學習,第十二天 _Router(三)
阿新 • • 發佈:2019-02-20
導讀:昨天我們學習了一下路由的介面 RouterInterface,今天我們看下,路由類的實現
先看下面兩段程式碼:
Slim/DefaultServicesProvider.php
$container['router'] = function ($container) {
$routerCacheFile = false;
if (isset($container->get('settings')['routerCacheFile'])) {
$routerCacheFile = $container->get('settings')['routerCacheFile'];
}
$router = (new Router)->setCacheFile($routerCacheFile);
if (method_exists($router, 'setContainer')) {
$router->setContainer($container);
}
return $router;
};
這段程式碼就是容器初次載入的時候,路由的生成過程
我們在看下路由類例項化的過程
public function __construct(RouteParser $parser = null)
{
$this->routeParser = $parser ?: new StdParser;
var_dump($this->routeParser);die();
}
//列印結果如下,因為初次例項化的時候,並沒有傳遞引數
object(FastRoute\RouteParser\Std)#22 (0) { }
先學習下 setCacheFile 方法
public function setCacheFile($cacheFile)
{
if (!is_string($cacheFile) && $cacheFile !== false) {
throw new InvalidArgumentException('Router cacheFile must be a string or false');
}
$this->cacheFile = $cacheFile;
if ($cacheFile !== false && !is_writable(dirname($cacheFile))) {
throw new RuntimeException('Router cacheFile directory must be writable');
}
return $this;
}
這裡就設定了一下cacheFile,但是究竟設定的是多少呢?我們看下,前面的兩段程式碼
$routerCacheFile = false;
if (isset($container->get('settings') ['routerCacheFile']))
{
$routerCacheFile = $container->get('settings')['routerCacheFile'];
}
$router = (new Router)->setCacheFile($routerCacheFile);
問題:這裡的$container->get(‘settings’)[‘routerCacheFile’]又是多少呢?
我們回到容器類中檢視一番,原來如此
Slim/Container.php
private $defaultSettings = [
'httpVersion' => '1.1',
'responseChunkSize' => 4096,
'outputBuffering' => 'append',
'determineRouteBeforeAppMiddleware' => false,
'displayErrorDetails' => false,
'addContentLengthHeader' => true,
'routerCacheFile' => false, //來自於這裡,這下真相大白
];
結束語:今天就到這裡,明天繼續
美好的一天,加油