> For the complete documentation index, see [llms.txt](https://pckg.gitbook.io/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://pckg.gitbook.io/documentation/core-packages/index-3.md).

# Concept

Package [`pckg/concept`](https://github.com/pckg/concept) implements context (DI container) and resolvers.

## Installation

Require Composer package.

```bash
$ composer require pckg/context
```

## Usage

A global context holds singletones and registers resolvers which automatically resolve an instance of the requested class or interface.

There are 4 main resolvers used:

* `ContextResolver` - resolves instances registered in the `Context`
* `FrameworkResolver` - resolves singletone services such as `Router`, `Request`, `Config` and similar
* `FormResolver` - resolves form, initializes fields, fills defaults from the request body, performs validation
* `ReflectResolver` - auto-creates requested interfaces or classes

When the app is accessed/run via entrypoint (`index.php`, `dev.php`, `console.php` or `bootstrap.php` in tests), we first require Composer's `autoload.php` file.

On second step, we create a new `Context` by first registering all resolvers and creating a new `Context`.

The third step is where the global event `Dispatcher` is created.

Then we create an `Environment` and `Application`, initialize the app, run the app and reach the end of the request lifecycle.

```
require autoload.php -> create Context -> bind Dispatcher -> create Environment -> create Application -> init app -> run app
```
