Slim 框架学习,第六天 _Container(三)

继续学习Container类的内容

 昨天主要学习了一下,该类中的构造函数中的 parent::__construct($values);下面接着学习。

public function __construct(array $values = [])
{
    parent::__construct($values);

    $userSettings = isset($values['settings']) ? $values['settings'] : [];
    $this->registerDefaultServices($userSettings);
}

重点看一下registerDefaultServices该方法

private function registerDefaultServices($userSettings)
{
    $defaultSettings = $this->defaultSettings;

    /**
     * This service MUST return an array or an
     * instance of \ArrayAccess.
     *
     * @return array|\ArrayAccess
     */
     $this['settings'] = function () use ($userSettings, $defaultSettings) {
            return new Collection(array_merge($defaultSettings, $userSettings));
        };

        $defaultProvider = new DefaultServicesProvider();
        $defaultProvider->register($this);
 }

接下来,我们看下$this[‘settings’]最后输出的结果.

根据代码注释来看,返回的是@return array|\ArrayAccess,下面我们看下结果

object(Slim\Collection)#7 (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)
  }
}

这里返回了一个集合对象

最后看下重点内容,就是注册方法

$defaultProvider = new DefaultServicesProvider();
        $defaultProvider->register($this);

我们进入到DefaultServicesProvider类中。看下register方法

  public function register($container)
    {
        if (!isset($container['environment'])) {
            /**
             * This service MUST return a shared instance
             * of \Slim\Interfaces\Http\EnvironmentInterface.
             *
             * @return EnvironmentInterface
             */
            $container['environment'] = function () {
                return new Environment($_SERVER);
            };
        }

        if (!isset($container['request'])) {
            /**
             * PSR-7 Request object
             *
             * @param Container $container
             *
             * @return ServerRequestInterface
             */
            $container['request'] = function ($container) {
                return Request::createFromEnvironment($container->get('environment'));
            };
        }

        if (!isset($container['response'])) {
            /**
             * PSR-7 Response object
             *
             * @param Container $container
             *
             * @return ResponseInterface
             */
            $container['response'] = function ($container) {
                $headers = new Headers(['Content-Type' => 'text/html; charset=UTF-8']);
                $response = new Response(200, $headers);

                return $response->withProtocolVersion($container->get('settings')['httpVersion']);
            };
        }
     ......   
  }

仔细看一下,其实很简单。就是把闭包对象,设置键名,最后存入到了容器当中

今天就先讲到这里,明天继续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值