# Skrip Masuk ¶

Skrip masuk adalah langkah pertama pada proses bootstrap aplikasi. Dalam sebuah aplikasi (apakah itu aplikasi web atau aplikasi konsol) memiliki satu skrip masuk. Pengguna mengirim request ke skrip masuk dimana skrip tersebut membangun objek aplikasi dan meneruskan request ke objek tersebut.

Skrip masuk untuk aplikasi web harus disimpan pada direktori yang dapat diakses dari web sehingga dapat di akses oleh pengguna. Secara umum, skrip tersebut diberi nama `index.php`, tetapi boleh menggunakan nama lain, selama web server bisa mengakses skrip tersebut.

Skrip masuk untuk aplikasi konsol pada umumnya disimpan di dalam base path dari objek aplikasi dan diberi nama `yii` (dengan suffix `.php`). Skrip tersebut harus memiliki akses execute sehingga pengguna dapat menjalan aplikasi konsol menggunakan perintah `./yii <route> [argument] [option]`.

Skrip masuk umumnya mengerjakan tugas berikut ini:

- Menentukan global constant;
- Mendaftarkan autoloader Composer;
- Memasukkan file class Yii;
- Mengambil konfigurasi aplikasi, dan memuatnya;
- Membuat dan mengatur objek application;
- Memanggil yii\base\Application::run() untuk memproses request yang diterima;

## Aplikasi Web ¶

Kode berikut ini adalah kode yang terdapat pada skrip masuk Template Proyek Dasar.

    <?php

    defined('YII_DEBUG') or define('YII_DEBUG', true);
    defined('YII_ENV') or define('YII_ENV', 'dev');

    // mendaftarkan autoloader Composer
    require __DIR__ . '/../vendor/autoload.php';

    // memasukkan file class Yii
    require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';

    // Mengambil konfigurasi aplikasi
    $config = require __DIR__ . '/../config/web.php';

    // Membuat, mengkonfigurasi, dan menjalankan aplikasi
    (new yii\web\Application($config))->run();

## Aplikasi Konsol ¶

Demikian juga dengan aplikasi konsol, kode berikut ini adalah kode yang terdapat pada skrip masuk aplikasi konsol :

    #!/usr/bin/env php
    <?php
    /**
     * Yii console bootstrap file.
     *
     * @link http://www.yiiframework.com/
     * @copyright Copyright (c) 2008 Yii Software LLC
     * @license http://www.yiiframework.com/license/
     */

    defined('YII_DEBUG') or define('YII_DEBUG', true);
    defined('YII_ENV') or define('YII_ENV', 'dev');

    // mendaftarkan autoloader composer
    require __DIR__ . '/vendor/autoload.php';

    // memasukkan file class Yii
    require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';

    // Mengambil konfigurasi aplikasi
    $config = require __DIR__ . '/config/console.php';

    $application = new yii\console\Application($config);
    $exitCode = $application->run();
    exit($exitCode);

## Menentukan Constant ¶

Skrip masuk adalah file yang tepat untuk menentukan global constant. Yii mengenali tiga constant berikut ini:

- `YII_DEBUG`: untuk menentukan apakah aplikasi sedang dalam mode debug. Pada saat mode debug, aplikasi akan menyimpan informasi log lebih banyak, dan akan menampilkan detail error urutan pemanggilan (error call stack) jika ada exception yang di-throw. Alasan inilah, kenapa mode debug sebaiknya digunakan pada tahap pengembangan. Nilai default dari `YII_DEBUG` adalah `false`.
- `YII_ENV`: untuk menentukan pada mode environment manakah aplikasi ini dijalankan. Constant ini akan dijelaskan lebih lanjut di bagian Konfigurasi. Nilai default dari `YII_ENV` adalah `prod`, yang berarti aplikasi sedang dijalankan pada production environment.
- `YII_ENABLE_ERROR_HANDLER`: untuk menentukan apakah akan mengaktifkan penanganan eror yang disediakan oleh Yii. Nilai default dari constant ini adalah `true`.

Untuk menentukan constant, kita biasanya menggunakan kode berikut ini:

    defined('YII_DEBUG') or define('YII_DEBUG', true);

kode di atas memiliki tujuan yang sama dengan kode berikut ini:

    if (!defined('YII_DEBUG')) {
        define('YII_DEBUG', true);
    }

Jelas, kode yang pertama lah yang lebih ringkas dan lebih mudah untuk dimengerti.

Penentuan constant sebaiknya ditulis di baris-baris awal pada skrip masuk sehingga akan berfungsi ketika file PHP lain akan dimasukkan (include).