# Katakan Hello ¶

Bagian ini menjelaskan cara membuat halaman "Hello" baru dalam aplikasi Anda. Untuk mencapai tujuan ini, Anda akan membuat action dan sebuah view:

- Aplikasi ini akan mengirimkan permintaan halaman ke `action`.
- Dan `action` pada gilirannya akan membuat tampilan yang menunjukkan kata "Hello" kepada pengguna akhir.

Melalui tutorial ini, Anda akan belajar tiga hal:

1. Cara membuat action untuk menanggapi permintaan,
2. Cara membuat view untuk menyusun konten respon, dan
3. bagaimana aplikasi mengirimkan permintaan ke action.

## Membuat Action ¶

Untuk tugas "Hello", Anda akan membuat action `say` yang membaca parameter `message` dari request dan menampilkan pesan bahwa kembali ke pengguna. Jika request tidak memberikan parameter `message`, aksi akan menampilkan pesan "Hello".

> Info: Action adalah objek yang pengguna akhir dapat langsung merujuk ke eksekusi. Action dikelompokkan berdasarkan controllers. Hasil eksekusi action adalah respon yang pengguna akhir akan terima.

Action harus dinyatakan di controllers. Untuk mempermudah, Anda mungkin mendeklarasikan action `say` di`SiteController` yang ada. kontroler ini didefinisikan dalam file kelas `controllers/SiteController.php`. Berikut adalah awal dari action baru:

    <?php

    namespace app\controllers;

    use yii\web\Controller;

    class SiteController extends Controller
    {
        // ...existing code...

        public function actionSay($message = 'Hello')
        {
            return $this->render('say', ['message' => $message]);
        }
    }

Pada kode di atas, action `say` didefinisikan sebagai metode bernama`actionSay` di kelas `SiteController`. Yii menggunakan awalan `action` untuk membedakan metode action dari metode non-action dalam kelas controller. Nama setelah awalan `action` peta untuk ID tindakan ini.

Untuk sampai pada penamaan action, Anda harus memahami bagaimana Yii memperlakukan ID action. ID action selalu direferensikan dalam huruf kecil. Jika ID tindakan membutuhkan beberapa kata, mereka akan digabungkan dengan `tanda hubung` (Mis, `create-comment`). nama metode aksi yang dipetakan ke ID tindakan diperoleh dengan menghapus tanda hubung apapun dari ID, mengkapitalkan huruf pertama di setiap kata, dan awalan string yang dihasilkan dengan `action`. Sebagai contoh, ID action `create-comment` sesuai dengan nama method action `actionCreateComment`.

Metode action dalam contoh kita mengambil parameter `$message`, yang nilai defaultnya adalah `"Hello"` (persis dengan cara yang sama Anda menetapkan nilai default untuk fungsi atau metode apapun argumen di PHP). Ketika aplikasi menerima permintaan dan menentukan bahwa action `say` bertanggung jawab untuk penanganan request, aplikasi akan mengisi parameter ini dengan parameter bernama sama yang ditemukan dalam request. Dengan kata lain, jika permintaan mencakup a parameter `message` dengan nilai`"Goodbye"` , maka variabel `$message` dalam aksi akan ditugaskan nilai itu.

Dalam metode action, render() dipanggil untuk membuat sebuah view dari file bernama `say`. Parameter `message` juga diteruskan ke view sehingga dapat digunakan di sana. Hasil render dikembalikan dengan metode tindakan. Hasil yang akan diterima oleh aplikasi dan ditampilkan kepada pengguna akhir di browser (sebagai bagian dari halaman HTML yang lengkap).

## Membuat View ¶

View adalah skrip yang Anda tulis untuk menghasilkan konten respon. Untuk "Hello" tugas, Anda akan membuat view `say` yang mencetak parameter `message` yang diterima dari metode aksi:

    <?php
    use yii\helpers\Html;
    ?>
    <?= Html::encode($message) ?>

View `say` harus disimpan dalam file `views/site/say.php`. Ketika metode render() disebut dalam tindakan, itu akan mencari file PHP bernama `views/ControllerID/ViewName.php`.

Perhatikan bahwa dalam kode di atas, parameter `message` adalah di-HTML-encoded sebelum dicetak. Hal ini diperlukan karena sebagai parameter yang berasal dari pengguna akhir, sangat rentan terhadap serangan Cross-site scripting (XSS) dengan melekatkan kode JavaScript berbahaya dalam parameter.

Tentu, Anda dapat menempatkan lebih banyak konten di view `say`. konten dapat terdiri dari tag HTML, teks biasa, dan bahkan pernyataan PHP. Nyatanya, view `say` hanyalah sebuah script PHP yang dijalankan oleh metode render(). Isi dicetak oleh skrip view akan dikembalikan ke aplikasi sebagai hasil respon ini. Aplikasi ini pada gilirannya akan mengeluarkan hasil ini kepada pengguna akhir.

## Trying it Out ¶

Setelah membuat action dan view, Anda dapat mengakses halaman baru dengan mengakses URL berikut:

    https://hostname/index.php?r=site%2Fsay&message=Hello+World

URL ini akan menghasilkan halaman yang menampilkan "Hello World". Halaman yang berbagi header dan footer yang sama dengan halaman aplikasi lainnya.

Jika Anda menghilangkan parameter `message` dalam URL, Anda akan melihat tampilan halaman "Hello". Hal ini karena `message` dilewatkan sebagai parameter untuk metode `actionSay()`, dan ketika itu dihilangkan, nilai default `"Hello"` akan digunakan sebagai gantinya.

> Info: Halaman baru berbagi header dan footer yang sama dengan halaman lain karena metode render() otomatis akan menanamkan hasil view `say` kedalam apa yang disebut layout yang dalam hal ini Kasus terletak di `views/layouts/main.php`.

Parameter `r` di URL di atas memerlukan penjelasan lebih lanjut. Ini adalah singkatan dari route, sebuah ID unik aplikasi yang mengacu pada action. format rute ini adalah `ControllerID/ActionID`. Ketika aplikasi menerima permintaan, itu akan memeriksa parameter ini, menggunakan bagian `ControllerID` untuk menentukan kontroler kelas harus dipakai untuk menangani permintaan. Kemudian, controller akan menggunakan bagian `ActionID` untuk menentukan action yang harus dipakai untuk melakukan pekerjaan yang sebenarnya. Dalam contoh kasus ini, rute `site/say` akan diselesaikan dengan kontroler kelas `SiteController` dan action `say`. Sebagai hasilnya, metode `SiteController::actionSay()` akan dipanggil untuk menangani permintaan.

> Info: Seperti action, kontroler juga memiliki ID yang unik mengidentifikasi mereka dalam sebuah aplikasi. ID kontroler menggunakan aturan penamaan yang sama seperti ID tindakan. nama kelas controller yang berasal dari kontroler ID dengan menghapus tanda hubung dari ID, memanfaatkan huruf pertama di setiap kata, dan suffixing string yang dihasilkan dengan kata `Controller`. Misalnya, controller ID `post-comment` berkorespondensi dengan nama kelas controller `PostCommentController`.

## Ringkasan ¶

Pada bagian ini, Anda telah menyentuh controller dan melihat bagian dari pola arsitektur MVC. Anda menciptakan sebuah action sebagai bagian dari controller untuk menangani permintaan khusus. Dan Anda juga menciptakan view untuk menulis konten respon ini. Dalam contoh sederhana ini, tidak ada model yang terlibat. Satu-satunya data yang digunakan adalah parameter `message`.

Anda juga telah belajar tentang rute di Yii, yang bertindak sebagai jembatan antara permintaan pengguna dan tindakan controller.

Pada bagian berikutnya, Anda akan belajar cara membuat model, dan menambahkan halaman baru yang berisi bentuk HTML.