The Application, (or Slim\App) is the entry point to your Slim application and is used to register the routes that link to your callbacks or controllers.
// instantiate the App object
$app = new \Slim\App();
// Add route callbacks
$app->get('/', function ($request, $response, $args) {
return $response->withStatus(200)->write('Hello World!');
});
// Run application
$app->run();
The Application accepts just one argument. This can be either a Container instance or an array to configure the default container that is created automatically.
There are also a number of settings that are used by Slim. These are stored in the settings
configuration key. You can also add your application-specific settings.
For example, we can set the Slim setting displayErrorDetails to true and also configure
Monolog like this:
$config = [
'settings' => [
'displayErrorDetails' => true,
'logger' => [
'name' => 'slim-app',
'level' => Monolog\Logger::DEBUG,
'path' => __DIR__ . '/../logs/app.log',
],
],
];
$app = new \Slim\App($config);
As the settings are stored in the DI container so you can access them via the settings key in container factories. For example:
$loggerSettings = $container->get('settings')['logger'];
You can also access them in route callables via $this:
$app->get('/', function ($request, $response, $args) {
$loggerSettings = $this->get('settings')['logger'];
// ...
return $response;
});
If you need to add or update settings stored in the DI container after the container is initialized,
you can use the replace method on the settings container. For example:
$settings = $container->get('settings');
$settings->replace([
'displayErrorDetails' => true,
'determineRouteBeforeAppMiddleware' => true,
]);
Slim has the following default settings that you can override:
httpVersion'1.1')responseChunkSize4096)outputBufferingfalse, then no output buffering is enabled. If 'append'
or 'prepend', then any echo or print
statements are captured and are either appended or prepended to the Response
returned from the route callable.
'append')determineRouteBeforeAppMiddlewarefalse)displayErrorDetailsfalse)addContentLengthHeaderContent-Length header to the response.
If you are using a runtime analytics tool, such as New Relic, then this should be disabled.
true)routerCacheFilefalse to disable the FastRoute cache system.
false)