# Komponenty aplikacji ¶

Aplikacje są lokatorami usług. Posiadają one zestawy komponentów aplikacji, które zajmują się dostarczaniem różnych serwisów do obsługi żądań. Dla przykładu, komponent `urlManager` jest odpowiedzialny za przekierowania żądań do odpowiednich kontrolerów, komponent `db` dostarcza serwisy powiązane z bazami danych, itp.

Każdy komponent aplikacji posiada unikalne ID identyfikujące go w całej aplikacji. Możesz dostać się do tego komponentu przez wyrażenie:

    \Yii::$app->componentID

Dla przykładu, możesz użyć `\Yii::$app->db` do uzyskania połączenia z bazą danych lub `\Yii::$app->cache` do uzyskania dostępu do pamięci podręcznej zarejestrowanej w aplikacji.

Komponent jest tworzony przy pierwszym jego wywołaniu przez powyższe wyrażenie, każde kolejne wywołanie zwróci tą samą instancję tego komponentu.

Komponentami aplikacji może być każdy objekt. Możesz je zarejestrować przez skonfigurowanie parametru components w konfiguracji aplikacji. Dla przykładu:

    [
        'components' => [
            // rejestracja komponentu "cache" przy użyciu nazwy klasy
            'cache' => 'yii\caching\ApcCache',

            // rejestracja komponentu "db" przy użyciu tablicy konfiguracyjnej
            'db' => [
                'class' => 'yii\db\Connection',
                'dsn' => 'mysql:host=localhost;dbname=demo',
                'username' => 'root',
                'password' => '',
            ],

            // rejestracja komponentu "search" przy użyciu funkcji anonimowej
            'search' => function () {
                return new app\components\SolrService;
            },
        ],
    ]

> Informacja: Możesz zarejestrować tak wiele komponentów jak chcesz, jednak powinieneś robić to rozważnie. Komponenty aplikacji są podobne do zmiennych globalnych. Używanie zbyt wielu komponentów może potencjalnie uczynić Twój kod trudniejszym do testowania i utrzymania. W wielu przypadkach możesz po prostu utworzyć lokalny komponent i użyć go, kiedy jest to konieczne.

## Bootstrapping komponentów ¶

Tak, jak było wspomniane wcześniej, komponent aplikacji zostanie zinstancjowany tylko w momencie pierwszego wywołania. Czasami jednak chcemy, aby komponent został zainstancjowany dla każdego żądania, nawet jeśli nie jest bezpośrednio wywoływany. Aby to osiągnąć, możesz wylistować ID komponentów we właściwości bootstrap aplikacji.

Dla przykładu, następująca konfiguracja aplikacji zapewnia załadowanie komponentu `log` przy każdym żądaniu:

    [
        'bootstrap' => [
            'log',
        ],
        'components' => [
            'log' => [
                // konfiguracja komponentu `log`
            ],
        ],
    ]

## Podstawowe komponenty aplikacji ¶

Yii posiada podstawowe komponenty aplikacji ze stałymi ID oraz domyślną ich konfiguracją. Dla przykładu, komponent request jest używany do zbierania informacji na temat żądania użytkownika oraz przekazanie go do route'a; db reprezentuje połączenie z bazą danych, dzięki któremu możesz wykonywać zapytania do bazy. Z pomocą tych podstawowych komponentów aplikacja jest w stanie obsłużyć żądania użytkowników.

Poniżej znajduje się lista predefiniowanych podstawowych komponentów aplikacji. Możesz je konfigurować lub zmieniać, tak jak z normalnymi komponentami. Podczas konfigurowania podstawowych komponentów aplikacji, w przypadku nie podania klasy, zostanie użyta klasa domyślna.

- assetManager: zarządzanie zasobami oraz ich publikacja. Po więcej informacji zajrzyj do sekcji Assets.
- db: reprezentuje połączenie z bazą danych, dzięki której możliwe jest wykonywanie zapytań. Konfigurując ten komponent musisz określić klasę komponentu, tak samo jak inne wymagane właściwości, np. dsn. Po więcej informacji zajrzyj do sekcji Obiekty dostępu do danych (DAO).
- errorHandler: obsługuje błędy oraz wyjątki PHP. Po więcej informacji zajrzyj do sekcji Obsługa błędów.
- formatter: formatuje dane wyświetlane użytkownikom. Dla przykładu liczba może zostać wyświetlona z separatorem tysięcy. Po więcej informacji zajrzyj do sekcji Formatowanie danych.
- i18n: wspiera tłumaczenie i formatowanie wiadomości. Po więcej informacji zajrzyj do sekcji Internacjonalizacja.
- log: zarządza logowaniem informacji oraz błędów Po więcej informacji zajrzyj do sekcji Logowanie.
- mail: wspiera tworzenie oraz wysyłanie emaili. Po więcej informacji zajrzyj do sekcji Wysyłanie poczty.
- response: reprezentuje odpowiedź wysyłaną do użytkowników. Po więcej informacji zajrzyj do sekcji Odpowiedzi.
- request: reprezentuje żądanie otrzymane od użytkownika. Po więcej informacji zajrzyj do sekcji Żądania.
- session: reprezentuje informacje przetrzymywane w sesji. Ten komponent jest dostępny tylko w aplikacjach WEB. Po więcej informacji zajrzyj do sekcji Sesje i ciasteczka.
- urlManager: wspiera przetwarzania oraz tworzenie adresów URL. Po więcej informacji zajrzyj do sekcji Przetwarzanie i tworzenie adresów URL
- user: reprezentuje informacje dotyczące uwierzytelniania użytkownika. Ten komponent jest dostępny tylko w aplikacjach WEB. Po więcej informacji zajrzyj do sekcji Uwierzytelnianie.
- view: wspiera renderowanie widoków. Po więcej informacji zajrzyj do sekcji Widoki.