Slimは、アプリケーションのディペンデンシーを準備、管理、注入するためのオプションのディペンデンシーコンテナを使用します。Slimは、PSR-11を実装するPHP-DIのようなコンテナをサポートしています。
ディペンデンシーコンテナを提供する必要はありません。ただし、Appを作成する前に、コンテナのインスタンスをAppFactoryに提供する必要があります。
<?php
use DI\Container;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
require __DIR__ . '/../vendor/autoload.php';
// Create Container using PHP-DI
$container = new Container();
// Set container to create App with on AppFactory
AppFactory::setContainer($container);
$app = AppFactory::create();
コンテナにサービスを追加する
$container->set('myService', function () {
    $settings = [...];
    return new MyService($settings);
});
次のように、コンテナからサービスを明示的にフェッチしたり、Slimアプリケーションのルート内からフェッチしたりできます
/**
 * Example GET route
 *
 * @param  ServerRequestInterface $request  PSR-7 request
 * @param  ResponseInterface      $response  PSR-7 response
 * @param  array                  $args Route parameters
 *
 * @return ResponseInterface
 */
$app->get('/foo', function (Request $request, Response $response, $args) {
    $myService = $this->get('myService');
    // ...do something with $myService...
    return $response;
});
使用する前にサービスがコンテナに存在するかどうかをテストするには、次のようにhas()メソッドを使用します
/**
 * Example GET route
 *
 * @param  ServerRequestInterface $request  PSR-7 request
 * @param  ResponseInterface      $response  PSR-7 response
 * @param  array                  $args Route parameters
 *
 * @return ResponseInterface
 */
$app->get('/foo', function (Request $request, Response $response, $args) {
    if ($this->has('myService')) {
        $myService = $this->get('myService');
    }
    return $response;
});
すでにコンテナで定義されているディペンデンシーを使用してAppを作成する場合は、AppFactory::createFromContainer()メソッドを使用できます。
例
<?php
use App\Factory\MyResponseFactory;
use DI\Container;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseFactoryInterface;
use Slim\Factory\AppFactory;
require_once __DIR__ . '/../vendor/autoload.php';
// Create Container using PHP-DI
$container = new Container();
// Add custom response factory
$container->set(ResponseFactoryInterface::class, function (ContainerInterface $container) {
    return new MyResponseFactory(...);
});
// Configure the application via container
$app = AppFactory::createFromContainer($container);
// ...
$app->run();
サポートされているAppディペンデンシーは次のとおりです。