Slim 4 PHP 框架零基础学习笔记-依赖容器

1.什么是依赖容器

Slim 框架使用依赖容器来预载、管理和注入应用依赖。支持 PSR-11 或 Container-Interop 标准接口形式,框架内置 Pimple 容器,也可以使用 Acclimate 或 PHP-DI 等第三方的容器。

2.怎么使用依赖容器

你不具备提供相关性的容器。但是,如果这样做,则必须将容器实例注入Slim应用程序的构造函数中。

$container = new \Slim\Container;
$app = new \Slim\App($container);

向Slim容器添加服务:

$container = $app->getContainer();
$container['myService'] = function ($container) {
    $myService = new MyService();
    return $myService;
};

接下来,可以在Slim应用程序路径中,采用显式或隐式方式,对该容器实例引用操作。
下例是显示式引用方式:

/**
 * Example GET route
 *
 * @param  \Psr\Http\Message\ServerRequestInterface $req  PSR7 request
 * @param  \Psr\Http\Message\ResponseInterface      $res  PSR7 response
 * @param  array                                    $args Route parameters
 *
 * @return \Psr\Http\Message\ResponseInterface
 */
$app->get('/foo', function ($req, $res, $args) {
    $myService = $this->get('myService');

    return $res;
});

下例是隐式引用方式:

/**
 * Example GET route
 *
 * @param  \Psr\Http\Message\ServerRequestInterface $req  PSR7 request
 * @param  \Psr\Http\Message\ResponseInterface      $res  PSR7 response
 * @param  array                                    $args Route parameters
 *
 * @return \Psr\Http\Message\ResponseInterface
 */
$app->get('/foo', function ($req, $res, $args) {
    $myService = $this->myService;

    return $res;
});

要在使用之前测试容器中是否存在服务,请使用以下 has() 方法:

/**
 * Example GET route
 *
 * @param  \Psr\Http\Message\ServerRequestInterface $req  PSR7 request
 * @param  \Psr\Http\Message\ResponseInterface      $res  PSR7 response
 * @param  array                                    $args Route parameters
 *
 * @return \Psr\Http\Message\ResponseInterface
 */
$app->get('/foo', function ($req, $res, $args) {
    if($this->has('myService')) {
        $myService = $this->myService;
    }

    return $res;
});

Slim使用__get()和__isset()魔术方法,用于应用程序实例上尚不存在的所有属性的应用程序容器。

3.使用容器所需的服务

如果您使用Slim的内置容器,可以不用理会下面的内容。
如果选择第三方容器,则必须自行定义这些必需的服务。

设置

应用程序设置的关联数组,包括键:

  • httpVersion
  • responseChunkSize
  • outputBuffering
  • determineRouteBeforeAppMiddleware。
  • displayErrorDetails。
  • addContentLengthHeader。
  • routerCacheFile。

环境
实例 \Slim\Http\Environment。
请求
实例 \Psr\Http\Message\ServerRequestInterface。
响应
实例 \Psr\Http\Message\ResponseInterface。
路由器
实例 \Slim\Interfaces\RouterInterface。
foundHandler
实例 \Slim\Interfaces\InvocationStrategyInterface。
phpErrorHandler
如果抛出PHP 7错误,则调用Callable。可调用的必须返回一个实例
\Psr\Http\Message\ResponseInterface 并接受三个参数:

  1. \Psr\Http\Message\ServerRequestInterface
  2. \Psr\Http\Message\ResponseInterface
  3. \Error

errorHandler
如果抛出异常,则调用Callable。可调用的必须返回一个实例
\Psr\Http\Message\ResponseInterface 并接受三个参数:

  1. \Psr\Http\Message\ServerRequestInterface
  2. \Psr\Http\Message\ResponseInterface
  3. \Exception

notFoundHandler
如果当前HTTP请求URI与应用程序路由不匹配,则调用Callable。可调用的必须返回一个实例
\Psr\Http\Message\ResponseInterface 并接受两个参数:

  1. \Psr\Http\Message\ServerRequestInterface
  2. \Psr\Http\Message\ResponseInterface

notAllowedHandler
如果应用程序路由与当前HTTP请求路径匹配但不与其方法匹配,则调用Callable。可调用的必须必须返回一个实例
\Psr\Http\Message\ResponseInterface 并接受三个参数:

  1. \Psr\Http\Message\ServerRequestInterface
  2. \Psr\Http\Message\ResponseInterface
  3. 允许HTTP 请求的数组

callableResolver

实例 \Slim\Interfaces\CallableResolverInterface。

你可能感兴趣的:(Slim,PHP)