Anda di halaman 1dari 10

{{{

#!WikiMarkdown
Bab 4 - Dasar-Dasar Pembuatan Halaman
=====================================
Penuh rasa ingin tahu, tutorial pertama yang diikuti oleh programmer ketika bela
jar bahasa baru atau sebuah framework adalah sesuatu untuk menampilkan "Hello, w
orld!" pada layar. Sebenarnya aneh berpikir jika komputer sebagai benda yang dap
at menyapa seluruh dunia, semenjak setiap usaha pada lapangan inteligensia buata
n selalu menghasilkan kemampuan percakapan yang buruk. Tetapi symfony tidak sebo
doh itu dibandingkan program lain, dan buktinya adalah, anda dapat membuat halam
an yang menyapa "Hello, `<Your Name Here>`" di dalamnya.
Bab ini akan mengajarkan anda bagaimana untuk membuat sebuah modul, yang merupak
an struktur elemen yang mengelompokkan halaman-halaman. Anda juga akan belajar u
ntuk membuat halaman, yang dipisah antara action dan template, karena adanya pol
a MVC. Link dan form adalah interaksi web dasar; anda akan melihat bagaiman untu
k menysispkannya pada template dan menanganinya pada action.
Membuat Kerangka Modul
---------------------Sebagaimana diterangkan pada Bab 2, symfony mengelompokkan halaman-halaman ke da
lam modul-modul. Sebelum membuat sebuah halaman, anda perlu membuat sebuah modul
, yang awalnya berupa kulit kosong dengan struktur file yang dapat dikenali oleh
symfony.
Baris perintah symfony mengotomatisasi pembuatan modul-modul. Anda hanya perlu m
emanggil tugas `init-module` dengan nama aplikasi dan nama modul sebagai argumen
. Pada bab sebelumnya, anda sudah membuat sebuah applikasi `myapp`. Untuk menamb
ahkan modul `mymodule` ke aplikasi ini, ketik perintah-perintah berikut:
> cd ~/myproject
> symfony init-module myapp mymodule
>> dir+
>> dir+
>> file+

~/myproject/apps/myapp/modules/mymodule
~/myproject/apps/myapp/modules/mymodule/actions
~/myproject/apps/myapp/modules/mymodule/actions/actions.class.p

>>
>>
>>
>>

dir+
dir+
dir+
file+

~/myproject/apps/myapp/modules/mymodule/config
~/myproject/apps/myapp/modules/mymodule/lib
~/myproject/apps/myapp/modules/mymodule/templates
~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.

>>
>>
>>
>>

dir+
file+
tokens
tokens

~/myproject/apps/myapp/modules/mymodule/validate
~/myproject/test/functional/myapp/mymoduleActionsTest.php
~/myproject/test/functional/myapp/mymoduleActionsTest.php
~/myproject/apps/myapp/modules/mymodule/actions/actions.class.p

>> tokens

~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.

hp

php

hp
php
Diluar direktori `actions/`, `config/`, `lib/`, `templates/`, dan `validate/`, p
erintah ini membuat hanya tiga file saja. Satu pada folder test/ yang berhubunga
n 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 koson
g.

Listing 4-1 - Action Default yang Diciptakan, pada `actions/actions.class.php`


[php]
<?php
class mymoduleActions extends sfActions
{
public function executeIndex()
{
$this->forward('default', 'module');
}
}
>**CATATAN**
>Jika anda melihat ke file `actions.class.php` aktual, anda akan menemukan lebih
banyak baris daripada sebelumnya, termasuk banyak sekali komentar. Hal ini dika
renakan symfony merekomendasikan menggunakan komentar PHP untuk dokumentasi proy
ek anda dan menyiapkan setiap file kelas agar kompatibel dengan tool phpDocument
or ([http://www.phpdoc.org/](http://www.phpdoc.org/)).
Untuk setiap modul yang baru, symfony membuat sebuah action default `index`. Yan
g disusun dari sebuah action yang dinamakan `executeIndex` dan sebuah file templ
ate yang dinamakan `indexSuccess.php`. Arti dari awalan `execute` dan akhiran `S
uccess` akan dijelaskan pada Bab 6 dan 7, secara berurutan. Sementara ini, anda
pertimbangkan penamaan ini sebagai sebuah konvensi. Anda dapat melihat halaman y
ang dihasilkan (ditampilkan lagi pada Figur 4-1) dengan mengarahkan ke URL berik
ut:
http://localhost/myapp_dev.php/mymodule/index
Action default `index` tidak akan digunakan pada bab ini, jadi anda dapat mengha
pus metode `executeIndex()` dari file `actions.class.php`, dan menghapus file`in
dexSuccess.php` dari direktori `templates/`.
>**CATATAN**
>Symfony menawarkan cara lain untuk menginisialiasi sebuah modul selain mengguna
kan baris perintah. Salah satunya adalah dengan membuat direktori-direktori dan
file-file itu sendiri. Dalam banyak kasus, action-action dan template-template s
ebuah modul kebanyakan ditujukan untuk memanipulasi data pada tabel yang ditentu
kan. Sebagaimana kode yang dibutuhkan untuk membuat (create), mengambil (retriev
e), update, dan menghapus (delete) rekord dari tabel sering kali sama, symfony m
enyediakan sebuah mekanisme yang dinamakan scaffolding untuk menciptakan kode in
i untuk anda. Lihat Bab 14 untuk informasi lanjut mengenai teknik ini.
Figur 4-1 - Halaman index default yang diciptakan
![The default generated index page](/images/book/F0401.jpg "The default generate
d index page")
Menambah Halaman
---------------Dalam symfony, logika di belakang halaman-halaman disimpan pada action, dan pres
entasi ada pada template-template. Halaman-halaman tanpa logika (masih) membutuh
kan sebuah action yang kosong.
### Menambah Action
Halaman "Hello, world!" akan dapat diakses memlaui action `myAction`. Untuk memb
uatnya, tambahkan saja metode `executeMyAction` ke kelas `mymoduleActions`, sepe

rti ditunjukkan pada Listing 4-2.


Listing 4-2 - Menambahkan Action Layaknya Menambah Metode Execute ke Kelas Actio
n
[php]
<?php
class mymoduleActions extends sfActions
{
public function executeMyAction()
{
}
}
Nama dari metode action selalu `execute``Xxx``()`, dimana bagian kedua dari nama
tersebut adalah nama action dengan huruf depan kapital.
Sekarang, jika anda me-request URL berikut:
http://localhost/myapp_dev.php/mymodule/myAction
symfony akan mengatakan bahwa tidak ada file template `myActionSuccess.php`. Hal
tersebut wajar; dalam symfony, sebuah halaman selalu terdiri dari sebuah action
dan sebuah template.
>**PERHATIAN**
>URL-URL (bukan nama domain) bersifat case-sensitive, dan juga
nama metode bersifat case-insensitive dalam PHP). Ini berarti
hkan metode `executemyaction()`, atau `executeMyaction()`, dan
yAction` melalui browser, symfony akan mengembalikan kesalahan

symfony (meskipun
jika anda menamba
anda memanggil `m
404.

>**SIDEBAR**
>URL-URL adalah bagian dari respon
>
>Symfony menyediakan sistem routing yang memperbolehkan anda menggunakan pemisah
an penuh antara nama action sebenarnya dan bentuk URL yang digunakan untuk meman
ggilnya. Ini memperbolehkan format kustom pada URL sebaimana jika URL tersebut s
ebagai bagian dari respon. Anda tidak lagi dibatasi oleh struktur file atau para
meter-parameter request; URL untuk sebuah action dapat terlihat sebagai frase ya
ng anda inginkan. Sebagai contoh, pemanggilan action index dari suatu modul yang
dinamakan artikel biasanya terlihat seperti ini:
>
>
http://localhost/myapp_dev.php/article/index?id=123
>
>URL ini mengambil artikel yang diberikan dari database. Pada contoh ini, artike
l diambil (dengan `id=123`) tentang bagian di Eropa yang secara khusus mendiskus
ikan masalah keuangan di Perancis. Tetapi URL dapat ditulis dengan cara sangat b
erbeda dengan contoh sebelumnya dengan cukup merubah file konfigurasi `routing.y
ml`:
>
>
http://localhost/articles/europe/france/finance.html
>
>Bukan hanya URL yang dihasilkan search engine-friendly, tetapi juga sangat bera
rti bagi pengguna, yang selanjutnya dapat menggunakan address bar sebagai baris
perintah pseudo untuk membuat query-query kustom, seperti berikut:
>
>
http://localhost/articles/tagged/finance+france+euro

>
>Symfony mengetahui bagaimana cara memroses dan menciptkan URL-URL pintar untuk
pengguna. Sistem routing otomatis menempelkan parameter-parameter request dari U
RL pintar dan menyediakannya untuk action. Dia juga memformat hyperlink-hyperlin
k yang disertakan dalam respon sehingga hyperlink tersebut terlihat "pintar". An
da akan banyak belajar mengenai fitur ini pada Bab 9.
>
>Secara keseluruhan, ini berarti bahwa bagimana anda menamai suatu action dari a
plikasi-aplikasi anda seharusnya tidak mempengaruhi bagimana bentuk URL yang dig
unakan untuk memanggilnya harus terlihat, melainkan dari fungsi-fungsi action-ac
tion aplikasi tersebut. Nama sebuah action menjelaskan apa sebenarnya yang dapat
dikerjakannya, dan sering berupa kata kerja dalam bentuk infinitif (semisal `sh
ow`, `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-komen
tar kode untuk menjelaskan fungsi action anda, plus kode anda akan lebih mudah d
ipahami.
### Menambah Template
Action mengharapkan sebuah template untuk me-render dirinya. Sebuah template ada
lah file yang diletakkan pada direktori `templates/` dari sebuah modul, dinamaka
n dengan action dan terminasi action. Terminasi action default adalah "success,"
jadi file template yang harus dibuat untuk action `myAction` dinamakan `myActio
nSuccess.php`.
Template-template disarankan hanya berisi kode presentasi saja, jadi usahakan se
dikit mungkin menggunakan kode PHP. Sebagai fakta, halaman yang menampilkan "Hel
lo, world!" dapat menggunakan template sederhana seperti ditunjukkan pada Listin
g 4-3.
Listing 4-3 - Template `mymodule/templates/myActionSuccess.php`
[php]
<p>Hello, world!</p>
Jika anda perlu untuk mengeksekusi beberapa kode PHP dalam template, anda seharu
snya menghindari penggunakan sintaks PHP biasa, seperti ditunjukkan pada Listing
4-4. Melainkan, tulis template-template menggunakan sintaks PHP alternatif, sep
erti ditunjukkan pada Listing 4-5, untuk menjaga kode mudah dimengerti oleh prog
ramer-programer non PHP. Bukan hanya kode akhir akan teridentasi dengan benar, t
etapi juga membuat kode PHP kompleks tetap dalam action, karena hanya statemen-s
tatemen kontrol (`if`, `foreach`, `while`, dll) yang memiliki sintaks alternatif
.
Listing 4-4 - Sintaks PHP Biasa, Bagus untuk Action, Tetapi Buruk untuk Template
[php]
<p>Hello, world!</p>
<?php
if ($test)
{
echo "<p>".time()."</p>";
}
?>
Listing 4-5 - Sintaks PHP Alternatif, Bagus untuk Template

[php]
<p>Hello, world!</p>
<?php if ($test): ?>
<p><?php echo time(); ?></p>
<?php endif; ?>
>**TIP**
>Sebuah aturan yang baik untuk memeriksa jika sintaks template cukup mudah dibac
a adalah file tersebut seharusnya tidak berisi kode HTML yang di-echo-kan oleh P
HP atau menggunakan kurung kurawal. Dari kebanyakan waktu, ketika membuka `<?php
`, anda juga akan menutupnya dengan `?>` pada baris yang sama.
### Melewatkan Informasi dari Action ke Template
Tugas sebuah action adalah melakukan semua kalkulasi yang rumit, pengambilan dat
a, dan pengujian-pengujian, dan untuk menentukan variabel-variabel bagi template
untuk di-echo-kan atau diujikan. Symfony menyediakan atribut-atribut dalam kela
s action (diakses melalui `$this->variableName` dalam action) yang langsung dapa
t diakses dalam template dari namespace global (via `$variableName`). Listing 46 dan 4-7 menunjukkan bagaimana untuk melewatkan informasi dari action ke templa
te.
Listing 4-6 - Setting Atribut Action dalam Action untuk Membuatnya Tersedia bagi
Template
[php]
<?php
class mymoduleActions extends sfActions
{
public function executeMyAction()
{
$today = getdate();
$this->hour = $today['hours'];
}
}
Listing 4-7 - Template Memiliki Akses Langsung ke Attribut-Attribut Action
[php]
<p>Hello, world!</p>
<?php if ($hour >= 18): ?>
<p>Or should I say good evening? It is already <?php echo $hour ?>.</p>
<?php endif; ?>
>**CATATAN**
>Template sudah punya akses ke beberapa potong data tanpa perlu setup variabel d
alam 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 ses
i. Anda akan belajar bagaimana menggunakannya secara efisien.
Mendapatkan Informasi dari Pengguna dengan Form
----------------------------------------------Form adalah cara terbaik untuk mendapatkan informasi dari pengguna. Menulis form
dan elemen-elemen dalam HTML kadang-kadang dapat menyusahkan, khususnya jika an
da menginginkan hasil yang XHTML-compliant. Anda dapat menyertakan elemen-elemen
form dalam template-template symfony seperti biasa, sepeti ditunjukkan pada Lis
ting 4-8, tetapi symfony menyediakan helper-helper yang membuat tugas ini menjad

i mudah.
Listing 4-8 - Template Dapat Beisi Kode HTML Umum
[php]
<p>Hello, world!</p>
<?php if ($hour >= 18): ?>
<p>Or should I say good evening? It is already <?php echo $hour ?>.</p>
<?php endif; ?>
<form method="post" action="/myapp_dev.php/mymodule/anotherAction">
<label for="name">What is your name?</label>
<input type="text" name="name" id="name" value="" />
<input type="submit" value="Ok" />
</form>
Sebuah 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 List
ing 4-8 dengan kode yang ditunjukkan pada Listing 4-9.
Listing 4-9 - Lebih Cepat dan Mudah Menggunakan Helper daripada Menggunakan Tag
HTML
[php]
<p>Hello, world!</p>
<?php if ($hour >= 18): ?>
<p>Or should I say good evening? It is already <?php echo $hour ?>.</p>
<?php endif; ?>
<?php echo form_tag('mymodule/anotherAction') ?>
<?php echo label_for('name', 'What is your name?') ?>
<?php echo input_tag('name') ?>
<?php echo submit_tag('Ok') ?>
</form>
>**SIDEBAR**
>Helper disediakan untuk membantu anda
>
>Misal, seperti contoh pada Listing 4-9, anda berpikir bahwa versi helper tidak
sebegitu cepat dibandingkan dengan menulis sendiri kode HTML, pertimbangkan beri
kut ini:
>
>
[php]
>
<?php
>
$card_list = array(
>
'VISA' => 'Visa',
>
'MAST' => 'MasterCard',
>
'AMEX' => 'American Express',
>
'DISC' => 'Discover');
>
echo select_tag('cc_type', options_for_select($card_list, 'AMEX'));
>
?>
>
>Yang menghasilkan HTML berikut:
>
>
[php]
>
<select name="cc_type" id="cc_type">
>
<option value="VISA">Visa</option>
>
<option value="MAST">MasterCard</option>
>
<option value="AMEX" selected="selected">American Express</option>
>
<option value="DISC">Discover</option>

>
</select>
>
>Keuntungan menggunakan helper dalam template adalah kecepatan coding, kejelasan
kode, dan ringkas. Harga yang harus dibayar hanyalah waktu yang dibutuhkan untu
k belajar, yang akan selesai ketika anda menyelesaikan buku ini, dan waktu untuk
menulis <?php echo ?>, yang mungkin anda sudah memiliki jalan pintas pada penyu
nting teks favorit anda. Jadi anda bisa saja tidak menggunakan helper symfony da
lam template-template dan menulis kode HTML sebagaimana biasa anda lakukan, teta
pi hal ini banyak merugikan dan juga kurang menyenangkan.
Perlu dicatat penggunaan tag pembuka pendek (`<?=`, yang ekuivalen dengan `<?php
echo`) tidak direkomendasikan dalam aplikasi-aplikasi web profesional, karena s
erver web produksi anda mungkin bisa mengenali lebih dari satu bahasa scripting
sehingga terjadi kebingungan. Di samping itu, tag pembuka pendek tidak bekerja d
engan konfigurasi PHP default dan perlu pengaktifan tweaking server. Akhirnya, k
etika anda harus bekerja dengan XML dan validasi, itu akan gagal segera karena `
<?` memiliki arti khusus dalam XML.
Manipulasi form membutuhkan satu bab tersendiri, semenjak symfony menyediakan be
rbagai macam peralatan-peralatan, kebanyakan helper, untuk membuatnya lebih muda
h. Anda akan belajar lebih banyak mengenai helper-helper tersebut pada Bab 10.
Link ke Action Lain
------------------Anda sudah mengetahui bahwa ada pemisahan total antara nama action dan URL yang
digunakan untuk memanggilnya. Jadi jika anda membuat link ke `anotherAction` dal
am template seperti pada Listing 4-10, itu hanya akan bekerja dengan routing def
ault. Jika kemudian anda memutuskan untuk merubah tampilan URL, maka anda perlu
melihat lagi semua template-template dan merubah hyperlink.
Listing 4-10 - Hyperlink, dengan Cara Klasik
[php]
<a href="/myapp_dev.php/mymodule/anotherAction?name=anonymous">
I never say my name
</a>
Untuk menghindari usaha ini, anda seharusnya selalu menggunakan helper `link_to(
)` untuk membuat hyperlink ke action-action aplikasi. Listing 4-11 mendemonstras
ikan penggunaan helper hyperlink.
Listing 4-11 - Helper `link_to()`
[php]
<p>Hello, world!</p>
<?php if ($hour >= 18): ?>
<p>Or should I say good evening? It is already <?php echo $hour ?>.</p>
<?php endif; ?>
<?php echo form_tag('mymodule/anotherAction') ?>
<?php echo label_for('name', 'What is your name?') ?>
<?php echo input_tag('name') ?>
<?php echo submit_tag('Ok') ?>
<?php echo link_to('I never say my name','mymodule/anotherAction?name=anon
ymous') ?>
</form>
HTML yang dihasilkan sama dengan sebelumnya, kecuali ketika anda mengubah aturan
-aturan routing, semua template-template akan bertindak dengan benar dan mem-for
mat URL secara sesuai.

Helper `link_to()`, seperti kebanyakan helper lainnya, menerima argumen lain seb
agai pilihan khusus dan attribut-atribut tag tambahan. Listing 4-12 menunjukkan
contoh sebuah argumen pilihan dan HTML yang dihasilkan. Arguman pilihan bisa ber
upa array asosiatif atau string sederhana ditunjukkan dengan pasangan `key=value
` yang dipisahkan oelh spasi.
Listing 4-12 - Kebanyakan Helper Menerima Argumen Pilihan
[php]
// Argumen pilihan dengan array asosiatif
<?php echo link_to('I never say my name', 'mymodule/anotherAction?name=anony
mous',
array(
'class'
=> 'special_link',
'confirm' => 'Are you sure?',
'absolute' => true
)) ?>
// Argumen pilihan dengan string
<?php echo link_to('I never say my name', 'mymodule/anotherAction?name=anony
mous',
'class=special_link confirm=Are you sure? absolute=true') ?>
// Kedua pemanggilan tersebut menghasilkan output sama
=> <a class="special_link" onclick="return confirm('Are you sure?');"
href="http://localhost/myapp_dev.php/mymodule/anotherAction/name/anonymo
us">
I never say my name</a>
Kapan pun anda menggunakan helper symfony yang menghasilkan tag HTML, anda dapat
menyisipkan atribut-atribut tag tambahan (semisal atribut `class` pada contoh p
ada Listing 4-12) dalam argumen pilihan. Anda bahkan dapat menulis atribut-atrib
ut ini dengan cara HTML 4.0 "quick-and-dirty" (tanpa tanda kutip ganda), dan sym
fony akan menghasilkan format XHTML yang manis. Itulah alasan lain mengapa helpe
r-helper lebih cepat daripada menulis HTML.
>**CATATAN**
>Karena membutuhkan pengolahan dan transformasi tambahan, sintaks string sedikit
lebih lambat dibandingkan dengan sintaks array.
Seperti helper-helper form, helper-helper link jumlahnya banyak dan memiliki ban
yak pilihan. Bab 9 akan menggambarkannya secara detail.
Mendapatkan Informasi dari Request
---------------------------------Baik pengguna mengirimkan informasi via form (biasanya dengan request POST) atau
via URL (request GET), anda dapat mengambil data terkait dari action dengan met
ode `getRequestParameter()` dari obyek `sfActions`. Listing 4-13 menunjukkan bag
aimana, pada `anotherAction`, anda mengambil nilai dari parameter `name`.
Listing 4-13 - Mengambil Data dari Parameter Request dalam Action
[php]
<?php
class mymoduleActions extends sfActions
{
...

public function executeAnotherAction()


{
$this->name = $this->getRequestParameter('name');
}
}
Jika 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 r
equest, sama seperti `getRequestParameter()` dalam action.
Jika `executeAnotherAction()` kosong, Listing 4-14 menunjukkan bagaimana templat
e `anotherActionSuccess.php` mengambil parameter `name` yang sama.
Listing 4-14 - Mengambil Data dari Parameter Request Langsung pada Template
[php]
<p>Hello, <?php echo $sf_params->get('name') ?>!</p>
>**CATATAN**
>Mengapa tidak memakai variabel `$_POST`, `$_GET`, atau `$_REQUEST`? Karena kemu
dian URL-URL anda akan di-format dengan berbeda (seperti pada `http://localhost/
articles/europe/france/finance.html`, tanpa `?` maupun `=`), variabel-variabel P
HP umum tidak akan bekerja lagi, dan hanya sistem routing saja yang dapat mengam
bil parameter-parameter request. Dan anda mungkin menginginkan untuk menambahkan
filering input untuk mencegah injeksi kode perusak, yang hanya mungkin jika and
a menyimpan semua parameter-parameter request dalam satu parameter holder yang b
ersih.
Obyek `$sf_params` lebih powerful daripada hanya memberikan sebuah getter yang s
ama dengan array. Sebagai contoh, jika anda hanya ingin menguji keberadaan sebua
h parameter request, anda cukup menggunakan metode `$sf_params->has()` daripada
menguji nilai aktual dengan `get()`, seperti pada Listing 4-15.
Listing 4-15 - Menguji Keberadaan Parameter Request pada Template
[php]
<?php if ($sf_params->has('name')): ?>
<p>Hello, <?php echo $sf_params->get('name') ?>!</p>
<?php else: ?>
<p>Hello, John Doe!</p>
<?php endif; ?>
Anda mungkin sudah menebak ini bisa ditulis dalam satu baris saja. Seperti denga
n kebanyakan metode-metode getter dalam symfony, baik metode `getRequestParamete
r()` pada action dan metode `$sf_params->get()` pada template keduanya (yang, se
bagai fakta, memanggil metode yang sama pada obyek yang sama) menerima argumen k
edua: nilai default yang digunakan jika parameter request tidak ada.
[php]
<p>Hello, <?php echo $sf_params->get('name', 'John Doe') ?>!</p>
Kesimpulan
---------Dalam symfony, halaman-halaman dikomposisikan dari sebuah action (sebuah metode
dalam file `actions/actions.class.php` yang diawali `execute`) dan sebuah templa
te (file pada direktori `templates/`, umumnya diakhiri dengan `Success.php`). Me
reka dikelompokkan dalam modul-modul, sesuai fungsi mereka dalam aplikasi. Pembu

atan template-template difasilitasi dengan helper-helper, yang merupakan fungsifungsi yang disediakan oleh symfony yang menghasilkan kode HTML. Dan anda perlu
men-cam-kan bahwa URL adalah sebagai bagian dari respon, yang dapat diformat ses
uai keperluan, jadi anda seharusnya tidak dibingungkan dengan penggunaan referen
si langsung ke URL dalam penamaan action atau pengambilan parameter request.
Sekali anda mengetahui prinsip-prinsip dasar ini, anda sudah siap menulis sebuah
aplikasi utuh dengan symfony. Tetapi itu akan membutuhkan jalan yang panjang, s
emenjak setiap tugas yang harus anda capai sepanjang pengembangan aplikasi difas
ilitasi dengan satu atau jalan lain oleh beberapa fitur symfony . . . dan itulah
mengapa buku ini tidak berhenti sampai di sini.
}}}

Anda mungkin juga menyukai