Slim 框架学习,第十七天 _Router(八)

来源:互联网 发布:淘宝最毒的差评语 编辑:程序博客网 时间:2024/06/14 08:06

导读,今天我们紧接着前几天的内容,学习 Slim/Route.php 类的功能

先看一下该类被调用的地方

在 Slim/Router.php 类中的 createRoute 方法中   protected function createRoute($methods, $pattern, $callable)    {        $route = new Route($methods, $pattern, $callable, $this->routeGroups, $this->routeCounter);        if (!empty($this->container)) {            $route->setContainer($this->container);        }        return $route;    }

首先我们看下Slim/Route.php 类的构造函数

public function __construct($methods, $pattern, $callable, $groups = [], $identifier = 0)    {        $this->methods  = is_string($methods) ? [$methods] : $methods;        $this->pattern  = $pattern;        $this->callable = $callable;        $this->groups   = $groups;        $this->identifier = 'route' . $identifier;    }

下面我们分别看一下,每个传入参数的值这里以http://localhost:8080/hello/world 为例子

$method
array(1) {  [0]=>  string(3) "GET"}

$pattern

string(13) "/hello/{name}"

$callable

object(Closure)#19 (2) {  ["this"]=>  object(Slim\Container)#3 (7) {    ["defaultSettings":"Slim\Container":private]=>    array(7) {      ["httpVersion"]=>      string(3) "1.1"      ["responseChunkSize"]=>      int(4096)      ["outputBuffering"]=>      string(6) "append"      ["determineRouteBeforeAppMiddleware"]=>      bool(false)      ["displayErrorDetails"]=>      bool(false)      ["addContentLengthHeader"]=>      bool(true)      ["routerCacheFile"]=>      bool(false)    }    ["values":"Pimple\Container":private]=>    array(11) {      ["settings"]=>      object(Slim\Collection)#20 (1) {        ["data":protected]=>        array(7) {          ["httpVersion"]=>          string(3) "1.1"          ["responseChunkSize"]=>          int(4096)          ["outputBuffering"]=>          string(6) "append"          ["determineRouteBeforeAppMiddleware"]=>          bool(false)          ["displayErrorDetails"]=>          bool(false)          ["addContentLengthHeader"]=>          bool(true)          ["routerCacheFile"]=>          bool(false)        }      }      ["environment"]=>      object(Closure)#8 (1) {        ["this"]=>        object(Slim\DefaultServicesProvider)#7 (0) {        }      }      ["request"]=>      object(Closure)#9 (2) {        ["this"]=>        object(Slim\DefaultServicesProvider)#7 (0) {        }        ["parameter"]=>        array(1) {          ["$container"]=>          string(10) ""        }      }      ["response"]=>      object(Closure)#10 (2) {        ["this"]=>        object(Slim\DefaultServicesProvider)#7 (0) {        }        ["parameter"]=>        array(1) {          ["$container"]=>          string(10) ""        }      }      ["router"]=>      object(Slim\Router)#21 (8) {        ["container":protected]=>        *RECURSION*        ["routeParser":protected]=>        object(FastRoute\RouteParser\Std)#22 (0) {        }        ["basePath":protected]=>        string(0) ""        ["cacheFile":protected]=>        bool(false)        ["routes":protected]=>        array(0) {        }        ["routeCounter":protected]=>        int(0)        ["routeGroups":protected]=>        array(0) {        }        ["dispatcher":protected]=>        NULL      }      ["foundHandler"]=>      object(Closure)#12 (1) {        ["this"]=>        object(Slim\DefaultServicesProvider)#7 (0) {        }      }      ["phpErrorHandler"]=>      object(Closure)#13 (2) {        ["this"]=>        object(Slim\DefaultServicesProvider)#7 (0) {        }        ["parameter"]=>        array(1) {          ["$container"]=>          string(10) ""        }      }      ["errorHandler"]=>      object(Closure)#14 (2) {        ["this"]=>        object(Slim\DefaultServicesProvider)#7 (0) {        }        ["parameter"]=>        array(1) {          ["$container"]=>          string(10) ""        }      }      ["notFoundHandler"]=>      object(Closure)#15 (1) {        ["this"]=>        object(Slim\DefaultServicesProvider)#7 (0) {        }      }      ["notAllowedHandler"]=>      object(Closure)#16 (1) {        ["this"]=>        object(Slim\DefaultServicesProvider)#7 (0) {        }      }      ["callableResolver"]=>      object(Closure)#17 (2) {        ["this"]=>        object(Slim\DefaultServicesProvider)#7 (0) {        }        ["parameter"]=>        array(1) {          ["$container"]=>          string(10) ""        }      }    }    ["factories":"Pimple\Container":private]=>    object(SplObjectStorage)#4 (1) {      ["storage":"SplObjectStorage":private]=>      array(0) {      }    }    ["protected":"Pimple\Container":private]=>    object(SplObjectStorage)#5 (1) {      ["storage":"SplObjectStorage":private]=>      array(0) {      }    }    ["frozen":"Pimple\Container":private]=>    array(2) {      ["settings"]=>      bool(true)      ["router"]=>      bool(true)    }    ["raw":"Pimple\Container":private]=>    array(2) {      ["settings"]=>      object(Closure)#6 (2) {        ["static"]=>        array(2) {          ["userSettings"]=>          array(0) {          }          ["defaultSettings"]=>          array(7) {            ["httpVersion"]=>            string(3) "1.1"            ["responseChunkSize"]=>            int(4096)            ["outputBuffering"]=>            string(6) "append"            ["determineRouteBeforeAppMiddleware"]=>            bool(false)            ["displayErrorDetails"]=>            bool(false)            ["addContentLengthHeader"]=>            bool(true)            ["routerCacheFile"]=>            bool(false)          }        }        ["this"]=>        *RECURSION*      }      ["router"]=>      object(Closure)#11 (2) {        ["this"]=>        object(Slim\DefaultServicesProvider)#7 (0) {        }        ["parameter"]=>        array(1) {          ["$container"]=>          string(10) ""        }      }    }    ["keys":"Pimple\Container":private]=>    array(11) {      ["settings"]=>      bool(true)      ["environment"]=>      bool(true)      ["request"]=>      bool(true)      ["response"]=>      bool(true)      ["router"]=>      bool(true)      ["foundHandler"]=>      bool(true)      ["phpErrorHandler"]=>      bool(true)      ["errorHandler"]=>      bool(true)      ["notFoundHandler"]=>      bool(true)      ["notAllowedHandler"]=>      bool(true)      ["callableResolver"]=>      bool(true)    }  }  ["parameter"]=>  array(3) {    ["$request"]=>    string(10) ""    ["$response"]=>    string(10) ""    ["$args"]=>    string(10) ""  }}

$groups

array(0) {}

$identifier

int(0)

这里的重点,不用说就是$callable,存放的是container 容器对象

最终返回给Router 的就是 该route 对象。

结束语:今天先学习到这里,明天继续。如果对路由加载不是很清楚的,可以看前面的文章。我的思路是,先整体梳理,然后拆开讲的细节。