Belajar Symfony : Bundle dan Routing

Masih di sela ke-selo an saya, mempelajari symfony framework. Artikel ini menuliskan kisah-kasih tentang bundle dan routing

Bundle

Ketika menggunakan symfony, kita akan ditemukan dengan istilah yang dinamakan ‘bundle’, Kalau sebelumnya ketika installasi symfony, ada bundle default yang sudah tersedia dengan nama AcmeDemoBundle. Arti dari bundle itu sendiri adalah kumpulan set file-file yang diimplementasikan untuk fitur-fitur tertentu, misalnya untuk blog, forum, account dan sebagainya.
Kita dapat menggunakan demo bundle untuk belajar dan mengembangkan aplikasi ini nanti, atau bisa juga membuat baru. Kalo saya cenderung memilih membuat baru aja, supaya jelas mana yang hasil buatan saya dan mudah untuk saya modifikasi.

Generate Bundle

Untuk melihat perintah yang bisa dilakukan oleh symfony app console, ketik perintah php app/console maka akan muncul daftar perintah yang bisa dijalankan. Untuk membuat / meng-generate bundle, perintah yang dijalankan
php app/console generate:bundle
Selanjutnya akan muncul perintah interaktif untuk meng-generate bundle, yang pertama adalah namespace untuk bundle yang mengikuti aturan yang ditetapkan pada http://symfony.com/doc/current/cookbook/bundles/best_practices.html#index-1, biasanya dengan awalan nama vendor, kemudian nama bundle dna akhiran Bundle. Sebagai contoh saya ingin membuat bundle untuk contoh aplikasi, sehingga saya buat namanya DuduExampleBundle, cara penulisannya

Bundle namespace: Dudu/ExampleBundle                                                    

In your code, a bundle is often referenced by its name. It can be the
concatenation of all namespace parts but it's really up to you to come
up with a unique name (a good practice is to start with the vendor name).
Based on the namespace, we suggest DuduExampleBundle.

Bundle name [DuduExampleBundle]:

Kemudian langkah selanjutnya, ikuti saja aturan default dari symfony generator tersebut, untuk configuration format saya memakai format yml.

Kalau sekiranya langkah tersebut terlalu lama / panjang, dapat disingkat dengan perintah sebagai berikut

$ php app/console generate:bundle --namespace=Dudu/ExampleBundle –format=yml

Selanjutnya akan muncul direktori baru pada folder src, beserta beberapa file yang tergabung di dalamnya. Nantinya file-file inilah yang akan kita gunakan untuk membangun aplikasi. Untuk menggunakan bundle ini, terlebih dahulu harus dimasukkan pada AppKernel.php, buka file tersebut yang terletak pada direktori App/AppKernel.php, perhatikan pada blok berikut, pastikan bundle yang sudah kita buat sudah tertulis di situ

$bundles = array(
            …...
            new Dudu\ExampleBundle\DuduExampleBundle(),
        );

Ok, bundle kita sudah bisa digunakan. Langkah selanjutnya adalah melihat dan mengkonfigurasi file routing kita. Caranya buka file routing.yml yang ada pada app/config/routing.yml pastikan pada file tersebut sudah ada routing yang mengarah ke bundle DuduExampleBundle sebagai berikut

dudu_example:
resource: "@DuduExampleBundle/Resources/config/routing.yml"
prefix: /

Kemudian buka routing yang ada pada bundle yang sudah dibuat, yaitu pada direktori src/Dudu/ExampleBundle/Resources/config/routing.yml. Pada file inilah routing yang digunakan untuk bundle yang kita buat tadi. Secara bawaan, route default adalah berbentuk sebagai berikut :

dudu_example_homepage:
path: /hello/{name}
defaults: { _controller: DuduExampleBundle:Default:index }

terdapat dua bagian pada routing tersebut, yang pertama adalah path yaitu URL yang akan dicocokan dengan format tersebut, yang kedua adalah default yaitu menunjukkan controller mana yang akan memprosesnya. Yang artinya jika nanti kita tulis di URL bar dengan path /hello/string maka akan diproses pada controller default dengan action / fungsi index.

Controller

Bagi yang sudah terbiasa pake MVC, framework dan semacanya, harunya sudah tidak asing dengan nama controller. Pada symfony, controller terletak pada masing-masing bundles, dan terletak pada direktori src/Dudu/ExampleBundle/Controller.

Kita mulai perjalanan kita dengan membuat halaman sederhana dulu ya…..,

pertama-tama generate controller (atau mau buat filenya sendiri juga bisa) dengan perintah

$ php app/console generate:controller

  Welcome to the Symfony2 controller generator  

Every page, and even sections of a page, are rendered by a controller.
This command helps you generate them easily.

First, you need to give the controller name you want to generate.
You must use the shortcut notation like AcmeBlogBundle:Post

Controller name:

Nama controller harus diisi lengkap dengan bundlenya, misalnya saya akan membuat controller dengan nama Date, maka controller name diisi dengan DuduExampleBundle:Date

selanjutnya ikuti saja dengan mengisi dengan isian defaultnya. Jika sudah selesai, lihat pada direktori Controller, akan ada sebuah controller baru dengan nama DateController.php Buka file tersbut, akan tampak seperti berikut ini

<?php

namespace Dudu\ExampleBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class DateController extends Controller
{
}

Nah pada class tersebut kita isikan action yang akan kita gunakan. Sebagai contoh adalah action index yang nanti akan kita panggil. Modifikasi file tersebut sehingga seperi berikut

…..
use Symfony\Component\HttpFoundation\Response;

class DateController extends Controller
{
    public function indexAction()
    {
        return new Response('<html><body>Sekarang tanggal '.date('d-m-Y').'</body></html>');
    }
}

Sebuah controller sederhana untuk menampilkan tanggal. Kemudian untuk memanggilnya, tulis terlebih dahulu pada routing.yml yang terletak pada bundle ini

....
date_controller:
path: /tanggal/
defaults: {_controller:DuduExampleBundle:Date:index}

panggil pada url bar dengan alamat (jalankan dulu servernya pake php app/console server:run) http://127.0.0.1:8000/app_dev.php/tanggal maka akan muncul hasil dari controller tersebut..

Sekian dulu aja ya,,sebenernya masih banyak yang bisa dipelajari pada controller dan routing ini, mungkin pada artikel selanjutnya bisa dipelajari bersama.

Terimakasih..