Yii Tutorial: Mengubah URL Jadi Lebih Cantik
May 14th, 2012, Written by: | Categories: Tutorial, Yii Framework

Pada umumnya orang yang menggunakan Yii Framework pasti akan menemukan kendala berupa URL yang tidak begitu bagus. Contohnya saja, untuk halaman sign-in, URL yang ditampilkan adalah www.websiteku.com/index.php?r=site/login. Bagi sebagian besar orang awam, tampilan URL ini tidak begitu normal. Dan bagi pemilik Web, URL demikian tidak akan disukai mesin pencari, alias tidak SEO-friendly.

Oleh karena itu, Yii Framework dirancang supaya apabila perlu mengubah URL-nya menjadi lebih ciamik, dapat dilakukan dengan gampang. Dengan menggunakan kelas CUrlManager kita dapat membuat jenis URL apapun yang diinginkan kita. Tetapi dalam artikel ini kita akan membahas teknik paling dasar untuk mengubah URL saja.

Mengaktifkan Url Manager

Untuk mengaktifkan URL supaya lebih rapi cukup buka file di protected/config/main.php lalu cari bagian yang tertulis

// uncomment the following to enable URLs in path-format
	/*
	'urlManager'=>array(
		  'urlFormat'=>'path',
		  'rules'=>array(
		  '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                  '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                  '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
		  ),
	),
	*/

Cukup hilangkan comment, maka URL akan langsung berubah. Jika hanya sekadar mengubah lebih rapi, maka pekerjaan Anda sampai sini sudah selesai. Tetapi masalahnya umumnya kita harus menguba bentuk URL yang lebih rumit sesuai kebutuhan klien Oleh karena itu, dalam artikel ini akan diajarkan bagaimana membuat rule sendiri.

Menghilangkan Tulisan index.php

Pertama-tama, mungkin Anda akan sangat ingin menghilangkan tulisan “index.php” dari URL. Untuk itu Anda cukup tambahkan ‘showScriptName’=>false seperti begini:

'urlManager'=>array(
		  'urlFormat'=>'path',
                  'showScriptName'=>false,
		  'rules'=>array(
		  ....
		  ),
	),

Kemudian tambahkan file .htaccess dengan isi seperti berikut:

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

Cara Menulis Aturan URL Manager

Misalnya, Anda ingin membuat halaman login dapat diakses dengan URL www.websiteku.com/sign-in. Maka Anda cukup menulis begini

'urlManager'=>array(
		  'urlFormat'=>'path',
		  'rules'=>array(
		      'sign-in' => 'site/login',
		  ),
	),

Penjelasannya begini. Biasanya untuk mengakses login kita akses dengan www.websiteku.com/index.php?r=site/login. Jadi di bagian kanan, kita tulis bentuk pada biasanya, yakni “site/login”. Lalu karena kita ingin halaman login bisa dibuka dengan www.websiteku.com/sign-in, maka di sebelah kiri cukup masukkan “sign-in”.

Anda bisa memasukkan satu per satu jika Anda mau. Tetapi masalahnya halaman Web kadang bisa sangat banyak. Akan sangat merepotkan jika menulis rule satu per satu. Anda bisa terkena cedera tangan.

RSI

"Tangan saya hampir patah gara-gara menulis 1450 aturan."

Jadi terkadang kita perlu sesuatu yang lebih fleksibel. Contohnya, seperti kasus di bawah ini:

www.websiteku.com/index.php?r=site/signup berubah menjadi www.websiteku.com/signup

www.websiteku.com/index.php?r=site/contact berubah menjadi www.websiteku.com/contact dan seterusnya.

Kita bisa menulis sintaks begini:

'urlManager'=>array(
		  'urlFormat'=>'path',
		  'rules'=>array(
		      '<nama>'=>'site/<nama>',
		  ),
	),

Sesuai peraturan sebelumnya. Di sebelah kanan merupakan bentuk URL biasanya. Karena biasanya kita mengakses dengan menulis www.websiteku.com/index.php?r=site/halaman1 atau index.php?r=site/halaman2 dan seterusnya, maka kita pasang yang berubah-berubah itu dengan tanda kurung siku. Pada contoh atas, penulis menggunakan “<nama>“. Pemberian nama terserah asal alfabet.

Kita ingin URL baru menjadi www.websiteku.com/halaman1 atau www.websiteku.com/halaman2 dan seterusnya. Jadi kita cukup tulis “<nama>” pada sebelah kiri. Ingat, jika sebelah kanan menggunakan “<nama>” maka kiri harus sama. Jadi kalau di kanan ditulis “<blabla>” maka sebelah kiri ditulis “<blabla>” juga.

Mungkin ada satu pertanyaan yang terbesit di dalam pikiran, bagaimana jika ada perkecualian? Maksudnya begini. Tadi kita sudah membuat aturan supaya semua halaman yang ber-URL www.websiteku.com/index.php?r=site/xyz akan menjadi www.websiteku.com/xyz, tetapi untuk URL www.websiteku.com/index.php?r=site/login justru ingin diubah menjadi www.websiteku.com/sign-in. Bagaimana dong?

Untuk ini kita cukup tulis begini saja:

'urlManager'=>array(
		  'urlFormat'=>'path',
		  'rules'=>array(
                      'sign-in' => 'site/login',
		      '<nama>'=>'site/<nama>',
		  ),
	),

Nah! Dua aturan ini, harus diperhatikan urutannya. Yii membaca aturan dari paling atas ke bawah. Ketika aturan pertama sudah memenuhi syarat, Yii tidak akan membaca URL di bawah lagi. Itu sebabnya mengapa kita harus menaruh ‘sign-in’=> ‘site/login’ di atas. Jika tidak percaya, silahkan tukar posisi ‘sign-in’ => ‘site/login’ dengan ‘<nama>’=>’site/<nama>’. Anda akan mengetahui maksudnya.

Sekian pembahasan menulis URL cantik yang paling dasar. Gampang kan?

More about: , ,

10 Responses to “Yii Tutorial: Mengubah URL Jadi Lebih Cantik”

    • Garry

      Terima kasih. Kami akan terus fokus untuk menulis seluk beluk Yii.. Sampai kehabisan ide…

      Reply
  1. Joshua

    Mantaps gann.. horee.. dapat ilmu lageee.. thanks mas broww.. ^^

    Reply
  2. somploc

    mantab gan, thanks bgt inponya.
    bermanpaat bgt. lek dis yo !!!

    Reply
  3. arpori

    Hi computesta, akan lebih bagus lagi kalo nerbitin buku, pasti aku akan beli deh

    Reply
  4. Terpusat Media

    ini merepresentasikan apa ya ??

    misal saya mau buat data URL : tempat-wisata/nama-tempat-wisata

    yang tempat-wisata => database
    yang nama-tempat-wisata => database

    sebelumnya di controller site actionDetail

    bagaimana ya ??

    Reply

Leave a Reply to Terpusat Media

Click here to cancel reply.