依赖容器(Dependency Container)

Slim 使用依赖容器来准备、管理和注入应用程序的相关依赖。Slim 支持 Container-Interop 接口实现的容器。你可以使用 Slim 的内置容器(基于 Pimple)或者第三方的容器,比如 AcclimatePHP-DI

如何使用容器

你并不_必须_提供一个依赖容器。如果你提供了,那么,你必须注入此容器的实例到 Slim 应用程序的构造函数中。

$container = new SlimContainer;
$app = new SlimApp($container);

你可以显式或隐式地从依赖容器中获取服务。你可以像下面这样子从 Slim 应用程序的路由中获取一个显示的容器实例。

/**
 * Example GET route
 *
 * @param  PsrHttpMessageServerRequestInterface $req  PSR7 request
 * @param  PsrHttpMessageResponseInterface      $res  PSR7 response
 * @param  array                                    $args Route parameters
 *
 * @return PsrHttpMessageResponseInterface
 */
$app->get("/foo", function ($req, $res, $args) {
 $myService = $this->get("myService");

 return $res;
});

你可以这样隐式地从容器中取得服务:

/**
 * Example GET route
 *
 * @param  PsrHttpMessageServerRequestInterface $req  PSR7 request
 * @param  PsrHttpMessageResponseInterface      $res  PSR7 response
 * @param  array                                    $args Route parameters
 *
 * @return PsrHttpMessageResponseInterface
 */
$app->get("/foo", function ($req, $res, $args) {
 $myService = $this->myService;

 return $res;
});

Slim uses __get() and __isset() magic methods that defer to the application’s container for all properties that do not already exist on the application instance.

必需的服务

你的容器必须实现这些必需的服务。如果你使用的是 Slim 内置的容器,这些服务都是已经准备好了的。如果你选择使用第三方容器,那么你必须自己来实现这些服务。

settings

应用程序设置项的关联数组(Associative array),包括以下关键字:

  • httpVersion
  • responseChunkSize
  • outputBuffering
  • determineRouteBeforeAppMiddleware.
  • displayErrorDetails.

environment

SlimInterfacesHttpEnvironmentInterface 的实例.

request

PsrHttpMessageServerRequestInterface的实例.

response

PsrHttpMessageResponseInterface的实例.

router

SlimInterfacesRouterInterface的实例.

foundHandler

SlimInterfacesInvocationStrategyInterface 的实例.

phpErrorHandler

PHP 7 错误被抛出时调用的 Callable。这个 callable 必须返回一个 PsrHttpMessageResponseInterface 的实例,并接收三个参数:

  1. PsrHttpMessageServerRequestInterface
  2. PsrHttpMessageResponseInterface
  3. Error

errorHandler

抛出异常时调用的 Callable。这个 callable 必须返回一个 PsrHttpMessageResponseInterface 的实例,并接收三个参数:

  1. PsrHttpMessageServerRequestInterface
  2. PsrHttpMessageResponseInterface
  3. Exception

notFoundHandler

如果当前的 HTTP 请求 URI 未能匹配到应用程序路由,则调用这个 Callable。这个 callable 必须返回一个 PsrHttpMessageResponseInterface 的实例,并接收三个参数:

  1. PsrHttpMessageServerRequestInterface
  2. PsrHttpMessageResponseInterface

notAllowedHandler

如果一个应用程序路由匹配到当前 HTTP 请求的路径而不是它的方法,则调用这个 Callable。这个 callable 必须 返回一个 PsrHttpMessageResponseInterface 的实例并接收三个参数:

  1. PsrHttpMessageServerRequestInterface
  2. PsrHttpMessageResponseInterface
  3. Array of allowed HTTP methods

callableResolver

SlimInterfacesCallableResolverInterface 的实例.

文章导航