# Komponen Aplikasi ¶

Objek Aplikasi (Application) adalah service locators. Objek ini menampung seperangkat apa yang kita sebut sebagai komponen aplikasi yang menyediakan berbagai layanan untuk menangani proses request. Sebagai contoh, component `urlManager` bertanggung jawab untuk menentukan route dari request menuju controller yang sesuai; component `db` menyediakan layanan terkait database; dan sebagainya.

Setiap component aplikasi memiliki sebuah ID yang mengidentifikasi dirinya secara unik dengan component aplikasi lainnya di dalam aplikasi yang sama. Anda dapat mengakses component aplikasi melalui expression berikut ini:

    \Yii::$app->componentID

Sebagai contoh, anda dapat menggunakan `\Yii::$app->db` untuk mengambil koneksi ke DB, dan `\Yii::$app->cache` untuk mengambil cache utama yang terdaftar dalam aplikasi.

Sebuah component aplikasi dibuat pertama kali pada saat objek tersebut pertama diakses menggunakan expression di atas. Pengaksesan berikutnya akan mengembalikan objek component yang sama.

Component aplikasi bisa merupakan objek apa saja. Anda dapat mendaftarkannya dengan mengatur property yii\base\Application::$components pada konfigurasi aplikasi. Sebagai contoh,

    [
        'components' => [
            // mendaftarkan component "cache" menggunakan nama class
            'cache' => 'yii\caching\ApcCache',

            // mendaftaran component "db" menggunakan konfigurasi array
            'db' => [
                'class' => 'yii\db\Connection',
                'dsn' => 'mysql:host=localhost;dbname=demo',
                'username' => 'root',
                'password' => '',
            ],

            // mendaftaran component "search" menggunakan anonymous function
            'search' => function () {
                return new app\components\SolrService;
            },
        ],
    ]

> Info: Walaupun anda dapat mendaftarkan component aplikasi sebanyak yang anda inginkan, anda harus bijaksana dalam melakukan hal ini. Component aplikasi seperti layaknya variabel global. Menggunakan component aplikasi yang terlalu banyak dapat berpotensi membuat kode anda menjadi rumit untuk diujicoba dan dikelola. Dalam banyak kasus, anda cukup membuat component lokal dan menggunakannya pada saat diperlukan.

## Bootstrap Components ¶

Seperti yang disebutkan di atas, sebuah component aplikasi akan dibuat ketika component diakses pertama kali. Jika tidak diakses sepanjang request diproses, objek tersebut tidak akan dibuat. Terkadang, anda ingin membuat objek component aplikasi tersebut untuk setiap request, walaupun component tersebut tidak diakses secara eksplisit. Untuk melakukannya, anda dapat memasukkan ID component tersebut ke property bootstrap dari objek Application.

Sebagai contoh, konfigurasi aplikasi di bawah ini memastikan bahwa objek component `log` akan selalu dibuat disetiap request:

    [
        'bootstrap' => [
            'log',
        ],
        'components' => [
            'log' => [
                // Konfigurasi untuk component "log"
            ],
        ],
    ]

## Component Aplikasi Inti ¶

Yii menentukan seperangkat component aplikasi inti dengan ID tetap dan konfigurasi default. Sebagai contoh, component request digunakan untuk memperoleh informasi tentang request dari pengguna dan merubahnya menjadi route. Component db merepresentasikan sebuah koneksi ke database yang bisa anda gunakan untuk menjalankan query ke database. Dengan bantuan component inti inilah maka aplikasi Yii bisa menangani request dari pengguna.

Dibawah ini adalah daftar dari component aplikasi inti. Anda dapat mengatur dan memodifikasinya seperti component aplikasi pada umumnya. Ketika anda mengatur component aplikasi inti, jika anda tidak mendefinisikan class-nya, maka class default yang akan digunakan.

- assetManager: mengatur bundel aset (asset bundles) dan publikasi aset (asset publishing). Harap melihat bagian Pengelolaan Aset untuk informasi lebih lanjut.
- db: merepresentasikan sebuah koneksi database yang bisa anda gunakan untuk melakukan query ke database. Sebagai catatan, ketika anda mengatur component ini, anda harus menentukan nama class dari component dan property lain dari component yang dibutuhkan, seperti yii\db\Connection::$dsn. Harap melihat bagian Data Access Objects untuk informasi lebih lanjut.
- errorHandler: menangani error PHP dan exception. Harap melihat bagian Menangani Error untuk informasi lebih lanjut.
- formatter: memformat data ketika data tersebut ditampilkan ke pengguna. Sebagai contoh, sebuah angka mungkin ditampilkan menggunakan separator ribuan, dan tanggal mungkin diformat dalam format panjang. Harap melihat bagian Memformat Data untuk informasi lebih lanjut.
- i18n: mendukung penerjemahan dan format pesan (message). Harap melihat bagian Internasionalisasi untuk informasi lebih lanjut.
- log: mengelola target log. Harap melihat bagian Log untuk informasi lebih lanjut.
- mailer: mendukung pembuatan dan pengiriman email. Harap melihat bagian Mail untuk informasi lebih lanjut.
- response: merepresentasikan response yang dikirimkan ke pengguna. Harap melihat bagian Response untuk informasi lebih lanjut.
- request: merepresentasikan request yang diterima dari pengguna. Harap melihat bagian Request untuk informasi lebih lanjut.
- session: merepresentasikan informasi session. Component ini hanya tersedia pada objek Aplikasi Web. Harap melihat bagian Session dan Cookie untuk informasi lebih lanjut.
- urlManager: mendukung penguraian dan pembuatan URL. Harap melihat bagian Route dan Pembuatan URL untuk informasi lebih lanjut.
- user: merepresentasikan informasi otentikasi dari pengguna. Component ini hanya tersedia pada objek Aplikasi Web. Harap melihat bagian Otentikasi untuk informasi lebih lanjut.
- view: mendukung proses render view. Harap melihat bagian View untuk informasi lebih lanjut.