Slim использует контейнер зависимостей для подготовки, управления и внедрения зависимостей приложений. Slim поддерживает контейнеры, реализующие PSR-11 или интерфейс Container-Interop Вы можете использовать встроенный контейнер Slim (на основе Pimple) или сторонние контейнеры, такие как Acclimate или PHP-DI.
Вам не нужно предоставлять контейнер зависимостей. Однако, если вы это сделаете, вы должны вставить экземпляр контейнера в конструктор 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()
магические методы, которые переносят в контейнер
приложения все свойства, которые еще не существуют в экземпляре приложения.
Ваш контейнер ДОЛЖЕН реализовать эти необходимые услуги. Если вы используете встроенный контейнер Slim, они предоставляются для вас. Если вы выберете сторонний контейнер, вы должны определить эти необходимые службы самостоятельно.
настройки : Ассоциативный массив параметров приложения, включая ключи:
* <code class="language-plaintext highlighter-rouge">httpVersion</code>
* <code class="language-plaintext highlighter-rouge">responseChunkSize</code>
* <code class="language-plaintext highlighter-rouge">outputBuffering</code>
* <code class="language-plaintext highlighter-rouge">determineRouteBeforeAppMiddleware</code>.
* <code class="language-plaintext highlighter-rouge">displayErrorDetails</code>.
* <code class="language-plaintext highlighter-rouge">addContentLengthHeader</code>.
* <code class="language-plaintext highlighter-rouge">routerCacheFile</code>.
Окружающая среда
: Экземпляр \Slim\Interfaces\Http\EnvironmentInterface
.
запрос
: Экземпляр \Psr\Http\Message\ServerRequestInterface
.
ответ
: Экземпляр \Psr\Http\Message\ResponseInterface
.
маршрутизатор
: Экземпляр \Slim\Interfaces\RouterInterface
.
foundHandler
: Экземпляр \Slim\Interfaces\InvocationStrategyInterface
.
phpErrorHandler
: Вызывается вызываемая, если возникает ошибка PHP 7. Вызываемый ДОЛЖЕН возвращать экземпляр
\Psr\Http\Message\ResponseInterface
и принимать три аргумента:
\Psr\Http\Message\ServerRequestInterface
\Psr\Http\Message\ResponseInterface
\Error
errorHandler
: Вызывается вызываемая, если вызывается исключение. Вызываемый ДОЛЖЕН возвращать экземпляр
\Psr\Http\Message\ResponseInterface
и принимать три аргумента:
\Psr\Http\Message\ServerRequestInterface
\Psr\Http\Message\ResponseInterface
\Exception
notFoundHandler
: Вызывается вызываемая, если текущий URI-запрос HTTP не соответствует маршруту приложения. Вызываемый
ДОЛЖЕН возвращать экземпляр \Psr\Http\Message\ResponseInterface
и принимать два аргумента:
\Psr\Http\Message\ServerRequestInterface
\Psr\Http\Message\ResponseInterface
notAllowedHandler
: Вызываемый вызов, если маршрут приложения соответствует текущему пути HTTP-запроса, но не его методу. Вызываемый
ДОЛЖЕН возвращать экземпляр \Psr\Http\Message\ResponseInterface
and accept three arguments:
\Psr\Http\Message\ServerRequestInterface
\Psr\Http\Message\ResponseInterface
callableResolver
: Экземпляр \Slim\Interfaces\CallableResolverInterface
.