1. 程式人生 > >Slim 框架學習,第十二天 _Router(三)

Slim 框架學習,第十二天 _Router(三)

導讀:昨天我們學習了一下路由的介面 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, //來自於這裡,這下真相大白
    ];

結束語:今天就到這裡,明天繼續
美好的一天,加油