Development

Documentation/id_ID/book/1.0/04-The-Basics-of-Page-Creation (diff)

You must first sign up to be able to contribute.

Changes from Version 1 of Documentation/id_ID/book/1.0/04-The-Basics-of-Page-Creation

Show
Ignore:
Author:
tohenk (IP: 202.95.150.6)
Timestamp:
03/02/09 04:22:20 (9 years ago)
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Documentation/id_ID/book/1.0/04-The-Basics-of-Page-Creation

    v0 v1  
     1{{{ 
     2#!WikiMarkdown 
     3 
     4Bab 4 - Dasar-Dasar Pembuatan Halaman 
     5===================================== 
     6 
     7Penuh rasa ingin tahu, tutorial pertama yang diikuti oleh programmer ketika belajar bahasa baru atau sebuah framework adalah sesuatu untuk menampilkan "Hello, world!" pada layar. Sebenarnya aneh berpikir jika komputer sebagai benda yang dapat menyapa seluruh dunia, semenjak setiap usaha pada lapangan inteligensia buatan selalu menghasilkan kemampuan percakapan yang buruk. Tetapi symfony tidak sebodoh itu dibandingkan program lain, dan buktinya adalah, anda dapat membuat halaman yang menyapa "Hello, `<Your Name Here>`" di dalamnya. 
     8 
     9Bab ini akan mengajarkan anda bagaimana untuk membuat sebuah modul, yang merupakan struktur elemen yang mengelompokkan halaman-halaman. Anda juga akan belajar untuk membuat halaman, yang dipisah antara action dan template, karena adanya pola MVC. Link dan form adalah interaksi web dasar; anda akan melihat bagaiman untuk menysispkannya pada template dan menanganinya pada action. 
     10 
     11Membuat Kerangka Modul 
     12---------------------- 
     13 
     14Sebagaimana diterangkan pada Bab 2, symfony mengelompokkan halaman-halaman ke dalam modul-modul. Sebelum membuat sebuah halaman, anda perlu membuat sebuah modul, yang awalnya berupa kulit kosong dengan struktur file yang dapat dikenali oleh symfony. 
     15 
     16Baris perintah symfony mengotomatisasi pembuatan modul-modul. Anda hanya perlu memanggil tugas `init-module` dengan nama aplikasi dan nama modul sebagai argumen. Pada bab sebelumnya, anda sudah membuat sebuah applikasi `myapp`. Untuk menambahkan modul `mymodule` ke aplikasi ini, ketik perintah-perintah berikut: 
     17 
     18    > cd ~/myproject 
     19    > symfony init-module myapp mymodule 
     20 
     21    >> dir+      ~/myproject/apps/myapp/modules/mymodule 
     22    >> dir+      ~/myproject/apps/myapp/modules/mymodule/actions 
     23    >> file+     ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php 
     24    >> dir+      ~/myproject/apps/myapp/modules/mymodule/config 
     25    >> dir+      ~/myproject/apps/myapp/modules/mymodule/lib 
     26    >> dir+      ~/myproject/apps/myapp/modules/mymodule/templates 
     27    >> file+     ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php 
     28    >> dir+      ~/myproject/apps/myapp/modules/mymodule/validate 
     29    >> file+     ~/myproject/test/functional/myapp/mymoduleActionsTest.php 
     30    >> tokens    ~/myproject/test/functional/myapp/mymoduleActionsTest.php 
     31    >> tokens    ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php 
     32    >> tokens    ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php 
     33 
     34Diluar direktori `actions/`, `config/`, `lib/`, `templates/`, dan `validate/`, perintah ini membuat hanya tiga file saja. Satu pada folder test/ yang berhubungan dengan pengujian unit, dan anda tidak perlu terganggu dengannya hingga Bab 15. File `actions.class.php` (ditunjukkan pada Listing 4-1) mem-forward ke halaman ucapan selamat modul default. File `templates/indexSuccess.php` yang masih kosong. 
     35 
     36Listing 4-1 - Action Default yang Diciptakan, pada `actions/actions.class.php` 
     37 
     38    [php] 
     39    <?php 
     40 
     41    class mymoduleActions extends sfActions 
     42    { 
     43      public function executeIndex() 
     44      { 
     45        $this->forward('default', 'module'); 
     46      } 
     47    } 
     48 
     49>**CATATAN** 
     50>Jika anda melihat ke file `actions.class.php` aktual, anda akan menemukan lebih banyak baris daripada sebelumnya, termasuk banyak sekali komentar. Hal ini dikarenakan symfony merekomendasikan menggunakan komentar PHP untuk dokumentasi proyek anda dan menyiapkan setiap file kelas agar kompatibel dengan tool phpDocumentor ([http://www.phpdoc.org/](http://www.phpdoc.org/)). 
     51 
     52Untuk setiap modul yang baru, symfony membuat sebuah action default `index`. Yang disusun dari sebuah action yang dinamakan `executeIndex` dan sebuah file template yang dinamakan `indexSuccess.php`. Arti dari awalan `execute` dan akhiran `Success` akan dijelaskan pada Bab 6 dan 7, secara berurutan. Sementara ini, anda pertimbangkan penamaan ini sebagai sebuah konvensi. Anda dapat melihat halaman yang dihasilkan (ditampilkan lagi pada Figur 4-1) dengan mengarahkan ke URL berikut: 
     53 
     54    http://localhost/myapp_dev.php/mymodule/index 
     55 
     56Action default `index` tidak akan digunakan pada bab ini, jadi anda dapat menghapus metode `executeIndex()` dari file `actions.class.php`, dan menghapus file`indexSuccess.php` dari direktori `templates/`. 
     57 
     58>**CATATAN** 
     59>Symfony menawarkan cara lain untuk menginisialiasi sebuah modul selain menggunakan baris perintah. Salah satunya adalah dengan membuat direktori-direktori dan file-file itu sendiri. Dalam banyak kasus, action-action dan template-template sebuah modul kebanyakan ditujukan untuk memanipulasi data pada tabel yang ditentukan. Sebagaimana kode yang dibutuhkan untuk membuat (create), mengambil (retrieve), update, dan menghapus (delete) rekord dari tabel sering kali sama, symfony menyediakan sebuah mekanisme yang dinamakan scaffolding untuk menciptakan kode ini untuk anda. Lihat Bab 14 untuk informasi lanjut mengenai teknik ini. 
     60 
     61Figur 4-1 - Halaman index default yang diciptakan 
     62 
     63![The default generated index page](/images/book/F0401.jpg "The default generated index page") 
     64 
     65Menambah Halaman 
     66---------------- 
     67 
     68Dalam symfony, logika di belakang halaman-halaman disimpan pada action, dan presentasi ada pada template-template. Halaman-halaman tanpa logika (masih) membutuhkan sebuah action yang kosong. 
     69 
     70### Menambah Action 
     71 
     72Halaman "Hello, world!" akan dapat diakses memlaui action `myAction`. Untuk membuatnya, tambahkan saja metode `executeMyAction` ke kelas `mymoduleActions`, seperti ditunjukkan pada Listing 4-2. 
     73 
     74Listing 4-2 - Menambahkan Action Layaknya Menambah Metode Execute ke Kelas Action 
     75 
     76    [php] 
     77    <?php 
     78 
     79    class mymoduleActions extends sfActions 
     80    { 
     81      public function executeMyAction() 
     82      { 
     83      } 
     84    } 
     85 
     86Nama dari metode action selalu `execute``Xxx``()`, dimana bagian kedua dari nama tersebut adalah nama action dengan huruf depan kapital. 
     87 
     88Sekarang, jika anda me-request URL berikut: 
     89 
     90    http://localhost/myapp_dev.php/mymodule/myAction 
     91 
     92symfony akan mengatakan bahwa tidak ada file template `myActionSuccess.php`. Hal tersebut wajar; dalam symfony, sebuah halaman selalu terdiri dari sebuah action dan sebuah template. 
     93 
     94>**PERHATIAN** 
     95>URL-URL (bukan nama domain) bersifat case-sensitive, dan juga symfony (meskipun nama metode bersifat case-insensitive dalam PHP). Ini berarti jika anda menambahkan metode `executemyaction()`, atau `executeMyaction()`, dan anda memanggil `myAction` melalui browser, symfony akan mengembalikan kesalahan 404. 
     96 
     97- 
     98 
     99>**SIDEBAR** 
     100>URL-URL adalah bagian dari respon 
     101> 
     102>Symfony menyediakan sistem routing yang memperbolehkan anda menggunakan pemisahan penuh antara nama action sebenarnya dan bentuk URL yang digunakan untuk memanggilnya. Ini memperbolehkan format kustom pada URL sebaimana jika URL tersebut sebagai bagian dari respon. Anda tidak lagi dibatasi oleh struktur file atau parameter-parameter request; URL untuk sebuah action dapat terlihat sebagai frase yang anda inginkan. Sebagai contoh, pemanggilan action index dari suatu modul yang dinamakan artikel biasanya terlihat seperti ini: 
     103> 
     104>     http://localhost/myapp_dev.php/article/index?id=123 
     105> 
     106>URL ini mengambil artikel yang diberikan dari database. Pada contoh ini, artikel diambil (dengan `id=123`) tentang bagian di Eropa yang secara khusus mendiskusikan masalah keuangan di Perancis. Tetapi URL dapat ditulis dengan cara sangat berbeda dengan contoh sebelumnya dengan cukup merubah file konfigurasi `routing.yml`: 
     107> 
     108>     http://localhost/articles/europe/france/finance.html 
     109> 
     110>Bukan hanya URL yang dihasilkan search engine-friendly, tetapi juga sangat berarti bagi pengguna, yang selanjutnya dapat menggunakan address bar sebagai baris perintah pseudo untuk membuat query-query kustom, seperti berikut: 
     111> 
     112>     http://localhost/articles/tagged/finance+france+euro 
     113> 
     114>Symfony mengetahui bagaimana cara memroses dan menciptkan URL-URL pintar untuk pengguna. Sistem routing otomatis menempelkan parameter-parameter request dari URL pintar dan menyediakannya untuk action. Dia juga memformat hyperlink-hyperlink yang disertakan dalam respon sehingga hyperlink tersebut terlihat "pintar". Anda akan banyak belajar mengenai fitur ini pada Bab 9. 
     115> 
     116>Secara keseluruhan, ini berarti bahwa bagimana anda menamai suatu action dari aplikasi-aplikasi anda seharusnya tidak mempengaruhi bagimana bentuk URL yang digunakan untuk memanggilnya harus terlihat, melainkan dari fungsi-fungsi action-action aplikasi tersebut. Nama sebuah action menjelaskan apa sebenarnya yang dapat dikerjakannya, dan sering berupa kata kerja dalam bentuk infinitif (semisal `show`, `list`, `edit`, dll). Nama-nama action dapat dibuat sama sekali tak nampak kepada pengguna, jadi jangan ragu untuk menggunakan nama-nama action eksplisit (semisal `listByName` atau `showWithComments`). Anda akan menhemat komentar-komentar kode untuk menjelaskan fungsi action anda, plus kode anda akan lebih mudah dipahami. 
     117 
     118### Menambah Template 
     119 
     120Action mengharapkan sebuah template untuk me-render dirinya. Sebuah template adalah file yang diletakkan pada direktori `templates/` dari sebuah modul, dinamakan dengan action dan terminasi action. Terminasi action default adalah "success," jadi file template yang harus dibuat untuk action `myAction` dinamakan `myActionSuccess.php`. 
     121 
     122Template-template disarankan hanya berisi kode presentasi saja, jadi usahakan sedikit mungkin menggunakan kode PHP. Sebagai fakta, halaman yang menampilkan "Hello, world!" dapat menggunakan template sederhana seperti ditunjukkan pada Listing 4-3. 
     123 
     124Listing 4-3 - Template `mymodule/templates/myActionSuccess.php` 
     125 
     126    [php] 
     127    <p>Hello, world!</p> 
     128 
     129Jika anda perlu untuk mengeksekusi beberapa kode PHP dalam template, anda seharusnya menghindari penggunakan sintaks PHP biasa, seperti ditunjukkan pada Listing 4-4. Melainkan, tulis template-template menggunakan sintaks PHP alternatif, seperti ditunjukkan pada Listing 4-5, untuk menjaga kode mudah dimengerti oleh programer-programer non PHP. Bukan hanya kode akhir akan teridentasi dengan benar, tetapi juga membuat kode PHP kompleks tetap dalam action, karena hanya statemen-statemen kontrol (`if`, `foreach`, `while`, dll) yang memiliki sintaks alternatif. 
     130 
     131Listing 4-4 - Sintaks PHP Biasa, Bagus untuk Action, Tetapi Buruk untuk Template 
     132 
     133    [php] 
     134    <p>Hello, world!</p> 
     135    <?php 
     136 
     137    if ($test) 
     138    { 
     139      echo "<p>".time()."</p>"; 
     140    } 
     141 
     142    ?> 
     143 
     144Listing 4-5 - Sintaks PHP Alternatif, Bagus untuk Template 
     145 
     146    [php] 
     147    <p>Hello, world!</p> 
     148    <?php if ($test): ?> 
     149    <p><?php echo time(); ?></p> 
     150    <?php endif; ?> 
     151 
     152>**TIP** 
     153>Sebuah aturan yang baik untuk memeriksa jika sintaks template cukup mudah dibaca adalah file tersebut seharusnya tidak berisi kode HTML yang di-echo-kan oleh PHP atau menggunakan kurung kurawal. Dari kebanyakan waktu, ketika membuka `<?php`, anda juga akan menutupnya dengan `?>` pada baris yang sama. 
     154 
     155### Melewatkan Informasi dari Action ke Template 
     156 
     157Tugas sebuah action adalah melakukan semua kalkulasi yang rumit, pengambilan data, dan pengujian-pengujian, dan untuk menentukan variabel-variabel bagi template untuk di-echo-kan atau diujikan. Symfony menyediakan atribut-atribut dalam kelas action (diakses melalui `$this->variableName` dalam action) yang langsung dapat diakses dalam template dari namespace global (via `$variableName`). Listing 4-6 dan 4-7 menunjukkan bagaimana untuk melewatkan informasi dari action ke template. 
     158 
     159Listing 4-6 - Setting Atribut Action dalam Action untuk Membuatnya Tersedia bagi Template 
     160 
     161    [php] 
     162    <?php 
     163 
     164    class mymoduleActions extends sfActions 
     165    { 
     166      public function executeMyAction() 
     167      { 
     168        $today = getdate(); 
     169        $this->hour = $today['hours']; 
     170      } 
     171    } 
     172 
     173Listing 4-7 - Template Memiliki Akses Langsung ke Attribut-Attribut Action 
     174 
     175    [php] 
     176    <p>Hello, world!</p> 
     177    <?php if ($hour >= 18): ?> 
     178    <p>Or should I say good evening? It is already <?php echo $hour ?>.</p> 
     179    <?php endif; ?> 
     180 
     181>**CATATAN** 
     182>Template sudah punya akses ke beberapa potong data tanpa perlu setup variabel dalam action. Setiap template dapat memanggil metode-metode dari obyek-obyek `$sf_context`, `$sf_request`, `$sf_params`, dan `$sf_user`. Mereka berisi data yang berkaitan dengan konteks sekarang, request, parameter-parameter request, dan sesi. Anda akan belajar bagaimana menggunakannya secara efisien. 
     183 
     184Mendapatkan Informasi dari Pengguna dengan Form 
     185----------------------------------------------- 
     186 
     187Form adalah cara terbaik untuk mendapatkan informasi dari pengguna. Menulis form dan elemen-elemen dalam HTML kadang-kadang dapat menyusahkan, khususnya jika anda menginginkan hasil yang XHTML-compliant. Anda dapat menyertakan elemen-elemen form dalam template-template symfony seperti biasa, sepeti ditunjukkan pada Listing 4-8, tetapi symfony menyediakan helper-helper yang membuat tugas ini menjadi mudah. 
     188 
     189Listing 4-8 - Template Dapat Beisi Kode HTML Umum 
     190 
     191    [php] 
     192    <p>Hello, world!</p> 
     193    <?php if ($hour >= 18): ?> 
     194    <p>Or should I say good evening? It is already <?php echo $hour ?>.</p> 
     195    <?php endif; ?> 
     196    <form method="post" action="/myapp_dev.php/mymodule/anotherAction"> 
     197      <label for="name">What is your name?</label> 
     198      <input type="text" name="name" id="name" value="" /> 
     199      <input type="submit" value="Ok" /> 
     200    </form> 
     201 
     202Sebuah helper adalah fungsi PHP yang didefinisikan oleh symfony yang dimaksudkan untuk digunakan dalam template-template. Helper menghasilkan beberapa kode HTML dan lebih cepat digunakan dibandingkan dengan menulis kode HTML aktual sendiri. Menggunakan helper-helper symfony, anda mendapatkan hasil yang sama dengan Listing 4-8 dengan kode yang ditunjukkan pada Listing 4-9. 
     203 
     204Listing 4-9 - Lebih Cepat dan Mudah Menggunakan Helper daripada Menggunakan Tag HTML 
     205 
     206    [php] 
     207    <p>Hello, world!</p> 
     208    <?php if ($hour >= 18): ?> 
     209    <p>Or should I say good evening? It is already <?php echo $hour ?>.</p> 
     210    <?php endif; ?> 
     211    <?php echo form_tag('mymodule/anotherAction') ?> 
     212      <?php echo label_for('name', 'What is your name?') ?> 
     213      <?php echo input_tag('name') ?> 
     214      <?php echo submit_tag('Ok') ?> 
     215    </form> 
     216 
     217>**SIDEBAR** 
     218>Helper disediakan untuk membantu anda 
     219> 
     220>Misal, seperti contoh pada Listing 4-9, anda berpikir bahwa versi helper tidak sebegitu cepat dibandingkan dengan menulis sendiri kode HTML, pertimbangkan berikut ini: 
     221> 
     222>     [php] 
     223>     <?php 
     224>     $card_list = array( 
     225>       'VISA' => 'Visa', 
     226>       'MAST' => 'MasterCard', 
     227>       'AMEX' => 'American Express', 
     228>       'DISC' => 'Discover'); 
     229>     echo select_tag('cc_type', options_for_select($card_list, 'AMEX')); 
     230>     ?> 
     231> 
     232>Yang menghasilkan HTML berikut: 
     233> 
     234>     [php] 
     235>     <select name="cc_type" id="cc_type"> 
     236>       <option value="VISA">Visa</option> 
     237>       <option value="MAST">MasterCard</option> 
     238>       <option value="AMEX" selected="selected">American Express</option> 
     239>       <option value="DISC">Discover</option> 
     240>     </select> 
     241> 
     242>Keuntungan menggunakan helper dalam template adalah kecepatan coding, kejelasan kode, dan ringkas. Harga yang harus dibayar hanyalah waktu yang dibutuhkan untuk belajar, yang akan selesai ketika anda menyelesaikan buku ini, dan waktu untuk menulis <?php echo ?>, yang mungkin anda sudah memiliki jalan pintas pada penyunting teks favorit anda. Jadi anda bisa saja tidak menggunakan helper symfony dalam template-template dan menulis kode HTML sebagaimana biasa anda lakukan, tetapi hal ini banyak merugikan dan juga kurang menyenangkan. 
     243 
     244Perlu dicatat penggunaan tag pembuka pendek (`<?=`, yang ekuivalen dengan `<?php echo`) tidak direkomendasikan dalam aplikasi-aplikasi web profesional, karena server web produksi anda mungkin bisa mengenali lebih dari satu bahasa scripting sehingga terjadi kebingungan. Di samping itu, tag pembuka pendek tidak bekerja dengan konfigurasi PHP default dan perlu pengaktifan tweaking server. Akhirnya, ketika anda harus bekerja dengan XML dan validasi, itu akan gagal segera karena `<?` memiliki arti khusus dalam XML. 
     245 
     246Manipulasi form membutuhkan satu bab tersendiri, semenjak symfony menyediakan berbagai macam peralatan-peralatan, kebanyakan helper, untuk membuatnya lebih mudah. Anda akan belajar lebih banyak mengenai helper-helper tersebut pada Bab 10. 
     247 
     248Link ke Action Lain 
     249------------------- 
     250 
     251Anda sudah mengetahui bahwa ada pemisahan total antara nama action dan URL yang digunakan untuk memanggilnya. Jadi jika anda membuat link ke `anotherAction` dalam template seperti pada Listing 4-10, itu hanya akan bekerja dengan routing default. Jika kemudian anda memutuskan untuk merubah tampilan URL, maka anda perlu melihat lagi semua template-template dan merubah hyperlink. 
     252 
     253Listing 4-10 - Hyperlink, dengan Cara Klasik 
     254 
     255    [php] 
     256    <a href="/myapp_dev.php/mymodule/anotherAction?name=anonymous"> 
     257      I never say my name 
     258    </a> 
     259 
     260Untuk menghindari usaha ini, anda seharusnya selalu menggunakan helper `link_to()` untuk membuat hyperlink ke action-action aplikasi. Listing 4-11 mendemonstrasikan penggunaan helper hyperlink. 
     261 
     262Listing 4-11 - Helper `link_to()` 
     263 
     264    [php] 
     265    <p>Hello, world!</p> 
     266    <?php if ($hour >= 18): ?> 
     267    <p>Or should I say good evening? It is already <?php echo $hour ?>.</p> 
     268    <?php endif; ?> 
     269    <?php echo form_tag('mymodule/anotherAction') ?> 
     270      <?php echo label_for('name', 'What is your name?') ?> 
     271      <?php echo input_tag('name') ?> 
     272      <?php echo submit_tag('Ok') ?> 
     273      <?php echo link_to('I never say my name','mymodule/anotherAction?name=anonymous') ?> 
     274    </form> 
     275 
     276HTML yang dihasilkan sama dengan sebelumnya, kecuali ketika anda mengubah aturan-aturan routing, semua template-template akan bertindak dengan benar dan mem-format URL secara sesuai. 
     277 
     278Helper `link_to()`, seperti kebanyakan helper lainnya, menerima argumen lain sebagai pilihan khusus dan attribut-atribut tag tambahan. Listing 4-12 menunjukkan contoh sebuah argumen pilihan dan HTML yang dihasilkan. Arguman pilihan bisa berupa array asosiatif atau string sederhana ditunjukkan dengan pasangan `key=value` yang dipisahkan oelh spasi. 
     279 
     280Listing 4-12 - Kebanyakan Helper Menerima Argumen Pilihan 
     281 
     282    [php] 
     283    // Argumen pilihan dengan array asosiatif 
     284    <?php echo link_to('I never say my name', 'mymodule/anotherAction?name=anonymous', 
     285      array( 
     286        'class'    => 'special_link', 
     287        'confirm'  => 'Are you sure?', 
     288        'absolute' => true 
     289    )) ?> 
     290 
     291    // Argumen pilihan dengan string 
     292    <?php echo link_to('I never say my name', 'mymodule/anotherAction?name=anonymous', 
     293      'class=special_link confirm=Are you sure? absolute=true') ?> 
     294 
     295    // Kedua pemanggilan tersebut menghasilkan output sama 
     296     => <a class="special_link" onclick="return confirm('Are you sure?');" 
     297        href="http://localhost/myapp_dev.php/mymodule/anotherAction/name/anonymous"> 
     298        I never say my name</a> 
     299 
     300Kapan pun anda menggunakan helper symfony yang menghasilkan tag HTML, anda dapat menyisipkan atribut-atribut tag tambahan (semisal atribut `class` pada contoh pada Listing 4-12) dalam argumen pilihan. Anda bahkan dapat menulis atribut-atribut ini dengan cara HTML 4.0 "quick-and-dirty" (tanpa tanda kutip ganda), dan symfony akan menghasilkan format XHTML yang manis. Itulah alasan lain mengapa helper-helper lebih cepat daripada menulis HTML. 
     301 
     302>**CATATAN** 
     303>Karena membutuhkan pengolahan dan transformasi tambahan, sintaks string sedikit lebih lambat dibandingkan dengan sintaks array. 
     304 
     305Seperti helper-helper form, helper-helper link jumlahnya banyak dan memiliki banyak pilihan. Bab 9 akan menggambarkannya secara detail. 
     306 
     307Mendapatkan Informasi dari Request 
     308---------------------------------- 
     309 
     310Baik pengguna mengirimkan informasi via form (biasanya dengan request POST) atau via URL (request GET), anda dapat mengambil data terkait dari action dengan metode `getRequestParameter()` dari obyek `sfActions`. Listing 4-13 menunjukkan bagaimana, pada `anotherAction`, anda mengambil nilai dari parameter `name`. 
     311 
     312Listing 4-13 - Mengambil Data dari Parameter Request dalam Action 
     313 
     314    [php] 
     315    <?php 
     316 
     317    class mymoduleActions extends sfActions 
     318    { 
     319      ... 
     320 
     321      public function executeAnotherAction() 
     322      { 
     323        $this->name = $this->getRequestParameter('name'); 
     324      } 
     325    } 
     326 
     327Jika manipulasi data cukup sederhana, anda bahkan tidak membutuhkan action untuk mengambil parameter request. Template memiliki akses ke obyek yabg dinamakan `$sf_params`, yang menawarkan metode `get`() untuk mengambil parameter-parameter request, sama seperti `getRequestParameter()` dalam action. 
     328 
     329Jika `executeAnotherAction()` kosong, Listing 4-14 menunjukkan bagaimana template `anotherActionSuccess.php` mengambil parameter `name` yang sama. 
     330 
     331Listing 4-14 - Mengambil Data dari Parameter Request Langsung pada Template 
     332 
     333    [php] 
     334    <p>Hello, <?php echo $sf_params->get('name') ?>!</p> 
     335 
     336>**CATATAN** 
     337>Mengapa tidak memakai variabel `$_POST`, `$_GET`, atau `$_REQUEST`? Karena kemudian URL-URL anda akan di-format dengan berbeda (seperti pada `http://localhost/articles/europe/france/finance.html`, tanpa `?` maupun `=`), variabel-variabel PHP umum tidak akan bekerja lagi, dan hanya sistem routing saja yang dapat mengambil parameter-parameter request. Dan anda mungkin menginginkan untuk menambahkan filering input untuk mencegah injeksi kode perusak, yang hanya mungkin jika anda menyimpan semua parameter-parameter request dalam satu parameter holder yang bersih. 
     338 
     339Obyek `$sf_params` lebih powerful daripada hanya memberikan sebuah getter yang sama dengan array. Sebagai contoh, jika anda hanya ingin menguji keberadaan sebuah parameter request, anda cukup menggunakan metode `$sf_params->has()` daripada menguji nilai aktual dengan `get()`, seperti pada Listing 4-15. 
     340 
     341Listing 4-15 - Menguji Keberadaan Parameter Request pada Template 
     342 
     343    [php] 
     344    <?php if ($sf_params->has('name')): ?> 
     345      <p>Hello, <?php echo $sf_params->get('name') ?>!</p> 
     346    <?php else: ?> 
     347      <p>Hello, John Doe!</p> 
     348    <?php endif; ?> 
     349 
     350Anda mungkin sudah menebak ini bisa ditulis dalam satu baris saja. Seperti dengan kebanyakan metode-metode getter dalam symfony, baik metode `getRequestParameter()` pada action dan metode `$sf_params->get()` pada template keduanya (yang, sebagai fakta, memanggil metode yang sama pada obyek yang sama) menerima argumen kedua: nilai default yang digunakan jika parameter request tidak ada. 
     351 
     352    [php] 
     353    <p>Hello, <?php echo $sf_params->get('name', 'John Doe') ?>!</p> 
     354 
     355Kesimpulan 
     356---------- 
     357 
     358Dalam symfony, halaman-halaman dikomposisikan dari sebuah action (sebuah metode dalam file `actions/actions.class.php` yang diawali `execute`) dan sebuah template (file pada direktori `templates/`, umumnya diakhiri dengan `Success.php`). Mereka dikelompokkan dalam modul-modul, sesuai fungsi mereka dalam aplikasi. Pembuatan template-template difasilitasi dengan helper-helper, yang merupakan fungsi-fungsi yang disediakan oleh symfony yang menghasilkan kode HTML. Dan anda perlu men-cam-kan bahwa URL adalah sebagai bagian dari respon, yang dapat diformat sesuai keperluan, jadi anda seharusnya tidak dibingungkan dengan penggunaan referensi langsung ke URL dalam penamaan action atau pengambilan parameter request. 
     359 
     360Sekali anda mengetahui prinsip-prinsip dasar ini, anda sudah siap menulis sebuah aplikasi utuh dengan symfony. Tetapi itu akan membutuhkan jalan yang panjang, semenjak setiap tugas yang harus anda capai sepanjang pengembangan aplikasi difasilitasi dengan satu atau jalan lain oleh beberapa fitur symfony . . . dan itulah mengapa buku ini tidak berhenti sampai di sini. 
     361 
     362}}}