Oke, sebenarnya ini bukan tutorial, tapi dokumentasi pribadi. Tentu ditulis seadanya yang penting menjadi pengingat supaya besok kalau belajar ulang bisa lebih cepat.
Pertama, download Symfony Standard Edition http://symfony.com/download. Yang saya download file nya: Symfony_Standard_Vendors_2.5.0.tgz.
Kedua, instalasi. Karena saya belum bisa composer, jadi belum pakai cara composer, tapi masih manual. Saya melakukan ujicoba di Linux Lubuntu 12.04 dengan Apache MySQL PHP bawaan default paket Lubuntu. Symfony_Standard_Vendors_2.5.0.tgz saya ekstrak di home directory, terbentuk folder “Symfony” yang kemudian saya rename menjadi “Symfony-slims”.
Edit file “/etc/apache2/sites-available/default”, tambahkan baris:
Alias /symfony-slims "/home/adminperpus/Symfony-slims/web"
<Directory "/home/adminperpus/Symfony-slims/web">
Options Indexes FollowSymlinks
#RewriteEngine On
AllowOverride All
DirectoryIndex index.php
Order allow,deny
Allow from all
</Directory>
Restart Apache. Jangan lupa chmod -R 777 folder app/cache dan app/logs.
Oke sekarang kita coba mem-porting aplikasi SLiMS ke framework symfony sebagai saran belajar. Jalankan:
php app/console generate:bundle –namespace=Slims/IlsBundle –format=yml
Akses http://localhost/symfony-slims/app_dev.php/, dan lihat hasilnya.
Sekarang kita coba bangun struktur database dari table biblio tapi yang tidak menggunakan referensi ke tabel lain:
- biblio_id
- title
- sor
- edition
- isbn_issn
- publish_year
- collation
- series_title
- call_number
- classification
- notes
Default ORM di Symfony adalah Doctrine. Jadi kita pakai saja itu meski Propel tampaknya lebih meyakinkan. Sekarang buka file app/config/parameter.yml:
parameters:
database_driver: pdo_mysql
database_host: 127.0.0.1
database_port: null
database_name: symfony
database_user: root
database_password: null
Ubah sesuai dengan database anda:
parameters:
database_driver: pdo_mysql
database_host: 127.0.0.1
database_port: null
database_name: slims_with_symfony
database_user: root
database_password: password_root_disini
Jika database nya sudah ada, maka isikan username dan password sesuai dengan kondisi yang ada. Tetapi jika database belum ada, maka username dan password bisa diisikan dengan user yang punya akses untuk membuat database (dalam hal ini saya pakai akses root).
Opsional, kita bisa sekalian database dibuatkan oleh symfony:
php app/console doctrine:database:create
Jangan lupa di MySQL selalu setting karakter default sebagai utf8:
[mysqld]
collation-server = utf8_general_ci
character-set-server = utf8
Sekarang kita mau bukan class entitas Biblio.
Buat folder “Entity” pada “src/Slims/IlsBundle”. Kemudian di dalam folder “Entity”, buat file Biblio.php yang isinya:
<?php
// src/Slims/IlsBundle/Entity/Biblio.php
namespace Slims\IlsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="biblio")
*/
class Biblio
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $biblio_id;
/**
* @ORM\Column(type="string", length=200)
*/
protected $title;
/**
* @ORM\Column(type="string", length=100)
*/
protected $sor;
/**
* @ORM\Column(type="string", length=100)
*/
protected $edition;
/**
* @ORM\Column(type="string", length=30)
*/
protected $isbn_issn;
/**
* @ORM\Column(type="string", length=20)
*/
protected $publish_year;
/**
* @ORM\Column(type="string", length=100)
*/
protected $collation;
/**
* @ORM\Column(type="string", length=200)
*/
protected $series_title;
/**
* @ORM\Column(type="string", length=30)
*/
protected $call_number;
/**
* @ORM\Column(type="string", length=15)
*/
protected $classification;
/**
* @ORM\Column(type="text")
*/
protected $notes;
}
?>
Sekarang men-generate getter dan setter nya:
php app/console doctrine:generate:entities Slims/IlsBundle/Entity/Biblio
sekarang membangun skema database nya:
php app/console doctrine:schema:update –force
Oke sekarang mencoba mengisi data dengan fitur non interaktif melalui doctrine.
Edit src/Slims/IlsBundle/Resources/config/routing.yml, tambahkan baris:
slims_ils_createbiblio:
pattern: /biblio/create
defaults: { _controller: SlimsIlsBundle:Bibliocreate:create }
Pada folder src/Slims/IlsBundle/Controller, bikin file BibliocreateController.php yang isinya:
<?php
namespace Slims\IlsBundle\Controller;
use Slims\IlsBundle\Entity\Biblio;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class BibliocreateController extends Controller
{
public function createAction()
{
$biblio = new Biblio();
$biblio->setTitle('Library automation in transitional societies : lessons from Eastern Europe');
$biblio->setSor('Edited by Andrew Lass & Richard E. Quandt');
$biblio->setEdition('');
$biblio->setIsbnIssn('0195132629');
$biblio->setPublishYear('2012');
$biblio->setCollation('xxi, 203 p. : ill. ; 23 cm.');
$biblio->setSeriesTitle('');
$biblio->setCallNumber('027.7 LAS l');
$biblio->setClassification('027.7');
$biblio->setNotes('Ini buku khas ilmu perpustakaan di Eropa');
$em = $this->getDoctrine()->getManager();
$em->persist($biblio);
$em->flush();
return new Response('Created biblio id '.$biblio->getBiblioId());
}
}
Kemudian coba insert ke database dengan cara dari browser akses ke http://localhost/symfony-slims/app_dev.php/biblio/create
Ganti lagi value pada:
$biblio->setTitle(‘Library automation in transitional societies : lessons from Eastern Europe’);
$biblio->setSor(‘Edited by Andrew Lass & Richard E. Quandt’);
$biblio->setEdition(”);
$biblio->setIsbnIssn(‘0195132629’);
$biblio->setPublishYear(‘2012’);
$biblio->setCollation(‘xxi, 203 p. : ill. ; 23 cm.’);
$biblio->setSeriesTitle(”);
$biblio->setCallNumber(‘027.7 LAS l’);
$biblio->setClassification(‘027.7’);
$biblio->setNotes(‘Ini buku khas ilmu perpustakaan di Eropa’);
kemudian akses lagi viabrowser untuk mengeksekusinya. Kemudian lihat di database, cek bahwa datanya sudah masuk.
Oke itu tadi input data secara sederhana. Sekarang kita mau ambil datanya untuk ditampilkan.
Edit src/Slims/IlsBundle/Resources/config/routing.yml, tambahkan baris:
slims_ils_detailbiblio:
pattern: /biblio/{biblio_id}
defaults: { _controller: SlimsIlsBundle:Bibliodetail:detail }
Pada folder src/Slims/IlsBundle/Controller, bikin file BibliodetailController.php yang isinya:
<?php
namespace Slims\IlsBundle\Controller;
use Slims\IlsBundle\Entity\Biblio;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class BibliodetailController extends Controller
{
public function detailAction($biblio_id)
{
$repository = $this->getDoctrine()
->getRepository('SlimsIlsBundle:Biblio');
$query = $repository->createQueryBuilder('b')
->where('b.biblio_id = :bid')
->setParameter('bid', '1')
->getQuery();
$biblio = $query->getResult();
if (!$biblio) {
throw $this->createNotFoundException(
'No biblio found !'
);
}
return $this->render('SlimsIlsBundle:Default:bibliodetail.html.twig', array('biblio' => $biblio));
}
}
Pada folder src/Slims/IlsBundle/Resources/views/Default, bikin file bibliodetail.html.twig yang isinya:
<h1>Detail buku:</h1>
{% for item in biblio %}
Judul: {{ item.title }}<br />
Statement of Responsibility: {{ item.sor }}<br />
Edisi: {{ item.edition }}<br />
ISBN/ISSN: {{ item.isbnIssn}}<br />
Tahun Terbit: {{ item.publishYear }} <br />
Deskripsi Fisik: {{ item.collation }}<br />
Judul Seri: {{ item.seriesTitle }} <br />
Nomor panggil: {{ item.callNumber }} <br />
Klasifikasi: {{ item.classification }} <br />
Catatan: {{ item.notes }}<br />
{% endfor %}
Coba akses pada http://localhost/symfony-slims/app_dev.php/biblio/1:
Oke sekian dulu. Selamat mencoba.