Archive for June, 2014

Belajar porting SLiMS dengan Symfony (1)

June 15, 2014

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”.

Image

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

Image

Akses http://localhost/symfony-slims/app_dev.php/, dan lihat hasilnya.

Image

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

Image

sekarang membangun skema database nya:

php app/console doctrine:schema:update –force 

Image

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

Image

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’);

Image

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:

Image

Oke sekian dulu. Selamat mencoba.

 

Beberapa error pada drupal dan solusinya

June 2, 2014

Jika develop aplikasi yang cukup besar dan punya kompleksitas permission yg njelimet (salah satunya karena saya menggunakan modul field_permission), kadang menu admin/people/permissions tidak terbuka dan hanya menampilkan halaman putih (WSOD), biasanya masalah memory_limit di php.ini yang perlu dibesarkan nilainya. Masalah berikutnya adalah perubahan setting permissions yang tidak mau disimpan. Solusinya ada di http://www.rolandu.com/2012/10/07/problems-with-large-forms/. Saya menggunakan Ubuntu Server 12.04 yang by-default termasuk suhosin didalamnya.

Kadang juga muncul error “

PDOException: SQLSTATE[HY000]:General error:2006MySQL server has gone away:

Nah kalau yang ini biasanya max_allowed_packet di konfigurasi mysql yang kudu digedein (http://drupal.stackexchange.com/questions/32642/nasty-database-error-when-adding-any-type-of-content).

Selamat mencoba!