apa yang baru di symfony 1.3 ?

24
Apa yang Baru di symfony 1.3 ? 1 Apa yang Baru di symfony 1.3 ? PDF ini dipersembahkan oleh : Lisensi: Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License Versi: whats-new-1.3-en-2009-10-03 / apa-yang-baru-di-symfony-1.3-id-2009-10-04 http://wildanm.wordpress.com

Upload: wildan-maulana

Post on 01-Nov-2014

2.451 views

Category:

Sports


5 download

DESCRIPTION

Seri tulisan symfony framework

TRANSCRIPT

Page 1: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 1

Apa yang Baru di symfony 1.3 ?

PDF ini dipersembahkan oleh :

Lisensi: Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported LicenseVersi: whats-new-1.3-en-2009-10-03 / apa-yang-baru-di-symfony-1.3-id-2009-10-04

http://wildanm.wordpress.com

Page 2: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 2

Apa yang baru di symfony 1.3 ?

Tutorial ini adalah pengenalan teknikal untuk symfony 1.3. Tutorial ini diramu untuk developer yang sudah pernah bekerja dengan symfony 1.2 dan bagi siapa saja yang ingin belajar dengan cepat fitur-fitur baru dari symfony 1.3.

Pertama, harap dicatat, symfony 1.3 itu kompatibel dengan PHP 5.2.4 atau lebih, sedangkan symfony 1.1 bekerja dengan PHP 5.1 dan symfony 1.0 dengan PHP 5.0

Jika anda ingin meng-upgrade dari 1.2, silahkan baca fike UPGRADE pada distribusi symfony. Disana anda akan menemukan semua informasi yang diperlukan untuk melakukan upgrade dengan aman seluruh proyek anda ke symfony 1.3.

MailerMulai symfony 1.3, ada mailer default yang berdasarkan pada SwiftMailer 4.1.

Mengirim sebuah email menjadi sangat mudah sekali, tinggal menggunakan method composeAndSend() dari sebuah action :

$this->getMailer()->composeAndSend('[email protected]', '[email protected]', 'Subject', 'Body');

Jika anda menginginkan fleksibilitas yang lebih, anda juga dapat menggunakan method compose() dan mengirimkannya kemudian. Berikut ini adakah contoh bagaimana menambahkan sebuah lampiran/attachment ke sebuah pesan :

$message = $this->getMailer()->

compose('[email protected]', '[email protected]', 'Subject', 'Body')->

attach(Swift_Attachment::fromPath('/path/to/a/file.zip'))

;

$this->getMailer()->send($message);

Karena mailer ini cukup powerful, ada baiknya anda meluangkan waktu untuk membaca dokumentasinya untuk informasi lebih lanjut.

SecurityKetika sebuah aplikasi baru dibuat dengan perintah generate:app, settingan security akan secara otomatis diaktifkan:

• escaping_strategy: Nilai ini secara default adalah true (dapat dinonaktifkan dengan opsi –escaping-strategy).

• csrf_secret: Sebuah password acak digenerate secara default, dan karenanya, proteksi

http://wildanm.wordpress.com

Page 3: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 3

CSRF diaktifkan secara default (dapat dinonaktifkan dengan menggunakan opsi –csrf-secret). Sangatlah direkomendasikan untuk mengubah password default yang digenerate ini, yaitu dengan mengedit file konfigurasi settings.yml, atau dengan menggunakan opsi –csrf-secret.

Widgets

Label Default

Ketika sebuah label secara otomatis digenerate dari nama field, akhiran _id sekarang dibuang :

• first_name => First name (sama seperti sebelumnya) • author_id => Author (sebelumnya menjadi “Author id”)

sfWidgetFormInputText

class sfWidgetFormInput sekarang abstrak. Field input teks sekarang dibuat dengan class sfWidgetFormInputText. Perubahan ini dibuat untuk mempermudah proses introspection class-class form.

Widget-Widget I18n

Widget-widger berikut telah ditambahkan :

• sfWidgetFormI18nChoiceLanguage • sfWidgetFormI18nChoiceCurrency • sfWidgetFormI18nChoiceCountry • sfWidgetFormI18nChoiceTimezone

Tiga widget pertama diatas menggantikan widget-widget berikut yang sudah dinyatakan deprecated sfWidgetFormI18nSelectLanguage, sfWidgetFormI18nSelectCurrency, and sfWidgetFormI18nSelectCountry

Fluent Interface

Widget-widget sekarang mengimplementasikan fluid interface untuk method-method berikut :

• sfWidgetForm: setDefault(), setLabel(), setIdFormat(), setHidden()

• sfWidget: addRequiredOption(), addOption(), setOption(), setOptions(), setAttribute(), setAttributes()

• sfWidgetFormSchema: setDefault(), setDefaults(), addFormFormatter(), setFormFormatterName(), setNameFormat(), setLabels(), setLabel(), setHelps(), setHelp(), setParent()

• sfWidgetFormSchemaDecorator: addFormFormatter(),

http://wildanm.wordpress.com

Page 4: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 4

setFormFormatterName(), setNameFormat(), setLabels(), setHelps(), setHelp(), setParent(), setPositions()

Validator-Validator

sfValidatorRegex

sfValidatorRegex sekarang telah memiliki opsi must_match yang baru. Jika diset false, maka agar validator nya valid regex nya tidak boleh cocok.

Opsi pattern dari of sfValidatorRegex sekarang bisa menjadi instance dari sfCallable yang me-return regex ketika dipanggil.

sfValidatorUrl

sfValidatorUrl memiliki opsi protocols yang baru. Opsi ini membolehkan anda untuk menentukan protokol apa saja yang diperbolehkan :

$validator = new sfValidatorUrl(array('protocols' => array('http', 'https')));

Protokol-protokol berikut secara default diperbolehkan :

• http • https • ftp • ftps

sfValidatorSchemaCompare

Class sfValidatorSchemaCompare memiliki dua buah komparator :

• IDENTICAL, yang ekuivalen dengan ===; • NOT_IDENTICAL, yang ekuivalen dengan !==;

sfValidatorChoice, sfValidatorPropelChoice, sfValidatorDoctrineChoice

Validator-validator sfValidatorChoice, sfValidatorPropelChoice, sfValidatorDoctrineChoice memiliki dua buah opsi yang baru diaktifkan jikalau opsi multiple bernilai true:

• min Jumlah minimum nilai yang harus dipilih• max Jumlah maksimum nilai yang harus dipilih

Validator-Validator I18n

Validator-validator berikut telah ditambahkan :

• sfValidatorI18nTimezone

http://wildanm.wordpress.com

Page 5: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 5

Pesan Error Default

Sekarang anda dapat mendefinisikan pesan error default secara global dengan menggunakan method sfForm::setDefaultMessage() :

sfValidatorBase::setDefaultMessage('required', 'This field is required.');

Kode diatas akan mengganti pesan default ''Requred' untuk seluruh validator. Sebagai catatan pesan default harus didefinisikan sebelum validator apapun dibuat (class configuration adalah tempat yang baik untuk melakukan hal ini).

Method setRequiredMessage() dan setInvalidMessage() telah deprecated dan yang harus digunakan sekarang adalah method setDefaultMessage().

Ketika symfony menampilkan sebuah pesan error, pesan error yang akan digunakan ditentukan dengan cara sebagai berikut :

• Symfony mencari sebuah pesan yang dilewatkan ketika validator dibuat (melalui argumen kedua dari konstruktor validator);

• Jika tidak didefinisikan, symfony akan mencari pesan default yang didefinisikan dengan method setDefaultMessage();

• Jika tidak didefinisikan, symfony secara otomatis akan menggunakan pesan defauly yang didefinisikan oleh validtot tersebut (ketika pesan telah ditambahkan dengan method addMessage() ).

Fluent Interface

Validator sekarang mengimplementasikan fluid interface dengan method-method berikut :

• sfValidatorSchema: setPreValidator(), setPostValidator()

• sfValidatorErrorSchema: addError(), addErrors()

• sfValidatorBase: addMessage(), setMessage(), setMessages(), addOption(), setOption(), setOptions(), addRequiredOption()

sfToolkitMethod getTmpDir() tekah dinyatakan deprecated dan tidak lagi digunakan dalam class-class inti symfony. Anda dapat mengganti penggunaan method ini dengan fungsi built-in PHP sys_get_temp_dir(). Fungsi getTmpDir() sekarang hanyalah proxy ke fungsi ini.

Method ini akan dibuang pada symfony 1.4.

http://wildanm.wordpress.com

Page 6: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 6

Forms

sfForm::useFields()

Method sfForm::useFields() yang baru membuang semua non-hidden fields dari form kecuali yang digunakan sebagai argumen. Terkadang lebih mudah menentukan field yang ingin anda gunakan didalam form, daripada menonaktifkan field-field yang tidak digunakan. Misalnya, ketika menambahkan field baru ke base form, field-field ini tidak akan secara otomatis muncul pada form anda sampai anda secara eksplisit menambahkannya (bayangkan sebuah form model dimana anda menambahkan kolom baru ke tabel yang berhubungan)

class ArticleForm extends BaseArticleForm

{

public function configure()

{

$this->useFields(array('title', 'content'));

}

}

Secara default, array yang berisi field-field ini juga digunakan untuk mengubah urutan field. Anda dapat melewatkan false sebagai argumen kedua ke useFields() untuk menonaktifkan pengurutan otomatis.

sfFormSymfony

Class sfFormSymfony memperkenalkan event dispatcher ke symfony form. Anda dapat mengakses dispatcher dari dalam class-class form anda sebagai self::$dispatcher. Even-even form berikut sekarang akan diberitahukan oleh symfony :

• form.post_configure: Event ini diberitahukan setiap kali form dikonfigurasi• form.filter_values: Event ini memfilter parameter-parameter dan array file-file yang

mungkin masih 'kotor' sebelum proses binding dilakukan.• form.validation_error: Event ini diberitahukan ketika validasi form gagal• form.method_not_found: Method ini diberitahukan ketika method yang tidak dikenali

dipanggil.

BaseForm

Setiap project symfony 1.3 yang baru menyertakan class BaseForm yang dapat anda gunakan untuk meng-ekstend komponen Form atau menambahkan fungsionalitas yang spesifik untuk suatu project. Form-form yang digenerate oleh sfDoctrinePlugin dan sfPropelPlugin secara otomatis meng-ekstend class ini. Jika anda membuat class-class form tambahan, class-class ini harus ekstend BaseForm dan bukannya sfForm.

http://wildanm.wordpress.com

Page 7: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 7

sfForm::doBind()

Proses pembersihan parameter-parameter yang masih kotor dapat dilakukan dengan method yang sangat bersahabat sekali, , ->doBind(), yang menerima gabungan array-array parameter dan file-file dari ->bind().

sfForm(Doctrine|Propel)::doUpdateObject()

Class-class form Doctrine dan Propel sekarang memasukkan method yang bersahabat dengan developer, ->doUpdateObject(). Method ini menerima sebuah array yang berisi nilai-nilai dari ->updateObject() yang telah diproses oleh ->processValues().

sfForm::enableLocalCSRFProtection() and sfForm::disableLocalCSRFProtection()

Dengan menggunakan method sfForm::enableLocalCSRFProtection() dan sfForm::disableLocalCSRFProtection(), sekarang anda dapat dengan mudah mengkonfigurasi proteksi CSRF melalui method configure() di class-class form.

Untuk menonaktifkan proteksi CSRF dari sebuah form, tambahkanlah barus berikut pada method

configure():

$this->disableLocalCSRFProtection();

Dengan memanggil disableLocalCSRFProtection(), proteksi CSRF akan dinonaktifkan, meskipun anda melewatkan CSRF secret ketika membuat sebuah form instance.

Fluent Interface

Beberapa method sfForm sekarang mengimplementasikan fluent interface : addCSRFProtection(), setValidators(), setValidator(), setValidatorSchema(), setWidgets(), setWidget(), setWidgetSchema(), setOption(), setDefault(), and setDefaults().

AutoloaderSemua autoloader symfony sekarang case-insensitive. PHP bersifat case-insensitive, maka begitu pula symfony.

sfAutoloadAgain (EXPERIMENTAL)

Sebuah autoloader spesial telah ditambahkan yang hanya digunakan pada mode debug. Class baru sfAutoloadAgain akan me-reload auloader symfony standar dan mencari class-class yang diminta pada filesystem. Dengan cara ini anda tidak perlu lagi menjalanlan perintahrun symfony cc setelah menambahkan class ke sebuah project.

http://wildanm.wordpress.com

Page 8: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 8

Test

Mempercepat Testing

Ketika anda memiliki test suite yang besar, menjalankan seluruh test setiap kali anda membuat perubahan bisa sangat memakan waktu, khususnya jika beberapa test ada yang gagal. Hal ini dikarenakan setiap kali anda membenarkan sebuah test, anda harus menjalankan seluruh test suit kembali untuk memastikan kalau anda tidak merusak sesuatu yang lain. Tetapi selama test-test yang gagal tidak dibenarkan tidak ada gunanya mengeksekusi ulang semua test yang lain. Mulai dari symfony 1.3, task test:all dan symfony:test memiliki opsi --only-failed (-f sebagai shorcut) yang memaksa task agar hanya mengeksekusi test-test uang gagal selama jalan test sebelumnya :

$ php symfony test:all –only-failed

Perintah diatas bekerja sebagai berikut : pada saat pertama kali, semua test berjalan seperti biasa. Tetapi untuk test-test berikutnya, hanya test yang gagal yang akan dieksekusi. Karena anda memperbaiki kode anda, beberapa test akan berhasil, dan tidak akan dieksekusi kembali pada eksekusi test-test berikutnya.Ketika semua test berhasil, full test suit akan berjalan .. dan anda dapat mengulanginya lagi

Test Fungsional

Ketika sebuah request menghasillan exception, method debug() dari responses tester sekarang akan mengeluarkan output berupa representasi teks mengnai exception yang mudah dibaca, ketimbang output HTML. Hal ini membuat proses debuggin menjadi lebih mudah.

sfTesterResponse memiliki method matches() baru yang menjalankan regex pada seluruh konten responses. Method ini sangat membantu pada responses non XML-like, dimana checkElement() tidak dapat digunakan. Method ini juga menggantikan method yang kurang powerful, yaitu method contains():

$browser->with('response')->begin()->

matches('/I have \d+ apples/')-> // it takes a regex as an argument

matches('!/I have \d+ apples/')-> // a ! at the beginning means that the regex must not match

matches('!/I have \d+ apples/i')-> // you can also add regex modifiers

end();

Ouput JUnit yang Kompatibel dengan XML

Task test sekarang dapat mengeluarkan output JUnit yang kompatibel dengan file XML dengan menggunakan opsi --xml :

http://wildanm.wordpress.com

Page 9: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 9

$ php symfony test:all --xml=log.xml

Debugging yang Mudah

Untuk memudahkan proses debugging ketika dilakukan test dilaporkan ada test-test yang gagal, sekarang anda dapat melewatkannya dengan opsi --trace untuk mendapatkan output lebih detail tentang kegagalan yang terjadi :

$ php symfony test:all -t

Pewarnaan Output Lime

Dimulai dari symfony 1.3, lime melakukan hal yang benar sejauh menyangkut pewarnaan. Artinya, anda dapat mengabaikan argumen kedua dari konstruktor lime yaitu lime_test.

sfTesterResponse::checkForm()

Tester response sekarang memasukkan sebuah method untuk mempermudah memverifikasi kalau semua field didalam sebuah fotm telah dirender ke response :

$browser->with('response')->begin()->

checkForm('ArticleForm')->

end();

Atau, jika anda lebih suka, anda dapat melewatkan sebuah form object :

$browser->with('response')->begin()->

checkForm($browser->getArticleForm())->

end();

Jika pada response terdapat beberapa form anda memilik opsi untuk menyediakan selector CSS untuk memilih bagian mana dari DOM yang akan di test :

$browser->with('response')->begin()->

checkForm('ArticleForm', '#articleForm')->

end();

Mendengarkan context.load_factories

Sekarang anda dapat menambahkan listener untuk event context.load_factories ke fungsional test anda. Hal ini tidak dapat dilakukan pada versi symfony sebelumnya.

http://wildanm.wordpress.com

Page 10: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 10

$browser->addListener('context.load_factories', array($browser, 'listenForNewContext'));

Taskssymfony CLI sekarang akan mencoba untuk mendeteksi lebar terminal window anda dan memformat barisan kode agar pas. Jika pendeteksian tidak memungkinkan maka lebar default CLI nya adalah 78 kolom.

sfTask::askAndValidate()

Ada method baru sfTask::askAndValidate() untuk menanyakan pertanyaan kepada user dan memvalidasi inputnya :

$anwser = $this->askAndValidate('What is you email?', new sfValidatorEmail());

Method juga menerima opsi yang berupa array (lihatlah dokumentasi API untuk informasi lebih lanjut)

symfony:test

Dari waktu ke waktu, developer perlu menjalankan symfony test suite untuk memeriksa kalau symfony bekerja dengan baik pada platform mereka. Sampai saat ini, mereka harus tahu script the prove.php yang dibundle dengan symfony untuk melakukan test. Mulai dari symfony 1.3 , sudah ada task built-in, symfony:test yang akan menjalankan inti symfony test suite dari command line, seperti task yang lain :

$ php symfony symfony:test

Jika anda terbiasa menjalankan php test/bin/prove.php, anda sekarang sebaiknya menjalankan perintah yang ekuivalen dengan perintah tersebut php data/bin/symfony symfony:test command.

project:deploy

Task project:deploy telah sedikit ditingkatkan. Task ini sekarang menampilkan progress file-file yang ditransfer secara realtime, tetapi hanya jika opsi -t dilewatkan. Jika tidak, task ini tidak akan menampilkan informasi kemajuan transfer file. Berbicara mengenai error, jika terjadi error, maka outputnya akan memiliki latar belakang berwarna merah untuk mempermudah identifikasi masalah.

generate:project

Mulai symfony 1.3, Doctrine adalah konfigurasi ORM default ketika menjalankan task generate:project:

http://wildanm.wordpress.com

Page 11: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 11

$ php /path/to/symfony generate:project foo

Untuk menggenerate project untuk Propel, gunakan opsi --orm:

$ php /path/to/symfony generate:project foo --orm=Propel

Jika anda tidak ingin menggunakan Propel atau Doctrine, anda dapat melewatkan none ke opsi --orm:

$ php /path/to/symfony generate:project foo --orm=none

Opsi --installer yang baru memperbolehkan anda untuk melewatkan script PHP yang nantinya dapat mengkostumisasi project yang baru saja dibuat. Script ini dieksekusi pada context task, jadi dapat menggunakan semua method-methodnya. Yang paling berguna diantaranya : installDir(), runTask(), ask(), askConfirmation(), askAndValidate(), reloadTasks(), enablePlugin(), and disablePlugin().

Untuk informasi lebih lanjut dapat ditemukan pada postingan blog resmi symfony. http://www.symfony-project.org/blog/2009/06/10/new-in-symfony-1-3-project-creation-customization.

sfFileSystem::execute()

Method sfFileSystem::execute() menggantikan method sfFileSystem::sh() dengan fitur tambahan yang powerful. Fungsi ini menerima callback untuk processing realtime output stdout dan stderr. Fungsi ini juga me-return kedua outputnya sebagai arrray. Anda dapat menemukan contoh penggunaan fungsi ini pada class sfProjectDeployTask.

task.test.filter_test_files

Filter task test:* sekarang memfilter file-file test melalui event task.test.filter_test_files sebelum menjalankannya. Event memasukkan parameter-parameter argumen dan opsi.

Perbaikan sfTask::run()

Sekarang anda dapat melewatkan argumen dan opsi berupa array assosiatif ke sfTask::run():

$task = new sfDoctrineConfigureDatabaseTask($this->dispatcher, $this->formatter);

$task->run(array(

'dsn' => 'mysql:dbname=mydb;host=localhost',

), array(

'name' => 'master',

));

http://wildanm.wordpress.com

Page 12: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 12

Versi sebelumnya akan tetap berjalan :

$task->run(array(

'mysql:dbname=mydb;host=localhost',

), array(

'--name=master',

));

sfBaseTask::setConfiguration()

Ketika memanggil sebuah task yang mengekstend dari PHP, anda tidak perlu lagi melewatkan opsi --application dan --env ke ->run(). Sebagai gantinya, anda tinggal men-set konfigurasi object secara langsung dengan memanggil ->setConfiguration().

$task = new sfDoctrineLoadDataTask($this->dispatcher, $this->formatter);

$task->setConfiguration($this->configuration);

$task->run();

Versi sebelumnya, masih dapat berjalan :

$task = new sfDoctrineLoadDataTask($this->dispatcher, $this->formatter);

$task->run(array(), array(

'--application='.$options['application'],

'--env='.$options['env'],

));

project:disable and project:enable

Sekarang anda dapat mengaktifkan dan menonaktidkan seluruh environtment dengan menggunakan task project:disable dan project:enable :

$ php symfony project:disable prod

$ php symfony project:enable prod

Anda juga dapat menentukan aplikasi mana yang ingin dinonaktifkan pada environment tersebut :

$ php symfony project:disable prod frontend backend

$ php symfony project:enable prod frontend backend

Task ini kompatibel dengan signature pada versi sebelumnya :

http://wildanm.wordpress.com

Page 13: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 13

$ php symfony project:disable frontend prod

$ php symfony project:enable frontend prod

help dan list

Task help dan list sekarang dapat menampilkan informasi nya sebagai XML :

$ php symfony list --xml

$ php symfony help test:all --xml

Ouputnya bekerja berdasarkan method baru, yaitu, sfTask::asXml(), yang me-return representasi XML dari sebuah object task.

Output XML ini kebanyakan digunakan oleh tool-tool pihak ketiga seperti IDE.

Exception

Autoloading

Ketika sebuah exception dilempar/thrown dalam proses autoloading, symfony sekarang menangkap/catch -nya, dan mengeluarkan output error kepada user. Hal ini akan memecahkan beberapa masalah halaman “White screen of death”.

Web Debug Toolbar

Jika memungkinkan, web debug toolbar juga sekarang juga muncul pada halaman exception di development environtment.

Propel

propel:insert-sql

Sebelum propel:insert-sql menghapus semua data dari sebuah database, ia akan minta konfirmasi. Karena task ini dapat menghapus data dari beberapa database, sekarang task ini juga menampilkan nama dari koneksi database yang berhubungan.

isPrimaryString column attribute

Sekarang anda dapat menggunakan attribute isPrimaryString di schema.yml dan symfony akan menggenerate method isPrimaryString pada class model yang me-return nilai dari kolom tersebut.

classes:

Article:

http://wildanm.wordpress.com

Page 14: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 14

columns:

id: ~

title: { type: varchar(255), isPrimaryString: true }

body: { type: longvarchar }

Konfigurasi ini akan menghasilkan method berikut pada BaseArticle:

public function __toString()

{

return $this->getTitle();

}

Routing

Requirement Default

Requirement default \d+ sekarang hanya diterapkan pada sfObjectRouteCollection ketika opsi column adalah id default. Ini artinya anda tidak harus lagi menyediakan requirement alternatif ketika kolom non-numerik diberika (misal. Slug).

CLI

Pewarnaan Output

Ketika anda menggunakan tool symfony CLI, symfony mencoba menebak apakah console anda mendukung warna. Tetapi terkadang, tebakan symfony salah; misalnya ketika anda menggunakan Cygwin (karena pada platform Windows pewarnaan selalu dimatikan ).

Mulai symfony 1.3, anda dapat memaksakan penggunaan warna untuk output dengan melewatkan opsi global --color .

I18N

Proses Update Data

Data yang digunakan untuk semua operasi I18N telah diupdate dari ICU project.Symfony sekarang datang dengan 330 file locale, yang berarti ada peningkatan sekitar 70 dibandingkan dengan symfony 1.2. Tolong dicatat kalau data yang diupdate mungkin akan sedikit berbeda dengan yang seharus nya ada disana sebelumnya, jadi misalnya sebagai contoh pengecekan test case untuk sepuluh item dalam daftar bahasa mungkin gagal.

http://wildanm.wordpress.com

Page 15: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 15

Pengurutan berdasarkan locale user

Semua pengurutan pada data yang bergantung pada locale sekarang juga dilakukan bergantung pada local. Method sfCultureInfo->sortArray() dapat digunakan untuk melakukan hal ini.

Plugin-PluginSebelum symfony 1.3, semua plugin secara default diaktifkan, kecuali sfDoctrinePlugin dan sfCompat10Plugin:

class ProjectConfiguration extends sfProjectConfiguration

{

public function setup()

{

// for compatibility / remove and enable only the plugins you want

$this->enableAllPluginsExcept(array('sfDoctrinePlugin', 'sfCompat10Plugin'));

}

}

Untuk project yang baru saja dibuat dengan symfony 1.3, plugin harus secara eksplisit diaktifkan pada class ProjectConfiguration agar dapat digunakan :

class ProjectConfiguration extends sfProjectConfiguration

{

public function setup()

{

$this->enablePlugins('sfDoctrinePlugin');

}

}

Task plugin:install secara otomatis mengaktifkan plugin yang diinstall olehnya (dan plugin:uninstall menonaktifkannya) . Jika anda menginstall sebuah plugin melalui subversion, anda masih harus mengaktifkannya secara manual.

Jika anda ingin menggunakan sebuah plugin-inti, seperti sfProtoculousPlugin atau$ sfCompat10Plugin, anda hanya harus menambahkan statement enablePlugins() terkait pada class ProjectConfiguration .

http://wildanm.wordpress.com

Page 16: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 16

Jika anda mengupgrade sebuah proyek dari 1.2, behavior lamanya masih aktif karena task tidak mengubah file ProjectConfiguration. Perubahan behavior hanya untuk project symfony 1.3 yang baru.

sfPluginConfiguration::connectTests()

Anda dapat mengkoneksikan plugin test ke task-task test:* dengan memanggil method konfigurasi plugin ->connectTests() pada method baru, setupPlugins():

class ProjectConfiguration extends sfProjectConfiguration

{

public function setupPlugins()

{

$this->pluginConfigurations['sfExamplePlugin']->connectTests();

}

}

Setting

sf_file_link_format

Symfony 1.3 memformat path file sebagai link yang dapat di-klik ketika memungkinkan (misal, pada template exception debug). sf_file_link_format digunakan untuk tujuan ini, jika diset, sebaliknya symfony akan mencari nilai konfigusi PHP untuk xdebug.file_link_format.

Sebagai contoh, jika anda ingin membuka file-file di TextMate, tambahkanlah settingan berikut di settings.yml:

all:

.settings:

file_link_format: txmt://open?url=file://%f&line=%l

Placeholder %f akan digantikan dengan path absolut dan placeholder %l akan digantikan dengan nomor baris.

Integrasi Doctrine

Pembuatan Class-Class Form

Sekarang memungkinkan untuk menambahkan opsi-opsi tambahan untuk symfony di file schema

http://wildanm.wordpress.com

Page 17: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 17

YAML Doctrine anda. Kita telah menambahkan beberapa opsi untuk menonaktifkan pembuatan class-class form dan filter.

Sebagai contoh, pada model reference many to many, anda tidak perlu class-class form atau filter dibuat. Jadi sekarang anda dapat melakukan hal berikut ini :

UserGroup:

options:

symfony:

form: false

filter: false

columns:

user_id:

type: integer

primary: true

group_id:

type: integer

primary: true

Pewarisan Class-Class Form

Ketika anda menggenerate form dari model-model anda, model-model anda mengandung pewarisan. Class-class anak nya akan mematuhi pewarisan dan menggenerate form-form yang mengikuti struktur pewarisan yang sama.

Task-Task Baru

Kita telah memperkenalkan beberapa task baru untuk menolong anda ketika bekerja dengan Doctrine.

Membuat Tabel-Tabel Model

Sekarang anda dapat membuat tabel-tabel secara individual untuk sekumpulan model-model yang ditentukan. Hal ini berguna jika anda mengembangkan beberapa model baru pada project/database yang sudah anda dan anda tidak ingin membuat ulang seluruh database dan hanya ingin membuat ulang beberapa tabel.

$ php symfony doctrine:create-model-tables Model1 Model2 Model3

Menghapus File-File Model

Seringkali anda akan mengubah model-model anda, mengubah nama, membuang model-model yang tidak digunakan, dan lain-lain pada file schema YAML anda. Ketika anda melakukan hal ini,

http://wildanm.wordpress.com

Page 18: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 18

maka anda akan memiliki class-class model, form dan filter yang telah usang. Sekarang anda dapat secara manual membersihkan file-file yang digenerate terkait dengan sebuah model dengan menggunakan task doctrine:delete-model-files task.

$ php symfony doctrine:delete-model-files ModelName

Task diatas akan mencari semua file-file berhubungan yang digenerate dan melaporkannya kepada anda sebelum meminta konfirmasi kepada anda pakah ingin menghapus file-file ini atau tidak.

Membersihkan File-File Model

Anda dapay mengautomasi proses-proses diatas dan mencari model apa yang ada pada disk tetapi tidak ada pada file schema YAML anda dengan menggunakan task doctrine:clean-model-files.

$ php symfony doctrine:clean-model-files

Perintah diatas akan membandingkan file schema YAML anda dengan model-model dan file-file yang telah digenerate dan menentukan apa yang harus dibuang. Model-model ini kemudian dilewatkan ke task doctrine:delete-model-files. Task ini akan meminta anda untuk mengkonfirmasi penghapusan file sebelum benar-benar menghapus apapun.

Reload Data

Adalah hal yang umum keperluan untuk menghapus database dan me-reload keseluruhan data fixture. Task doctrine:build-all-reload melakukan hal ini tetapi juga melakukan fungsi-fungsi yang lain, menggenerate model, form, filter dan lain-lain dan hal ini dapat memakan waktu pada proyek yang besar. Sekarang anda cukup menggunakan task doctrine:reload-data.

Perintah berikut.

$ php symfony doctrine:reload-data

Ekuivalen dengan menjalankan perintah-perintah berikut :

$ php symfony doctrine:drop-db

$ php symfony doctrine:build-db

$ php symfony doctrine:insert-sql

$ php symfony doctrine:data-load

Build apa saja

Task baru doctrine:build memperbolehkan anda untuk menentukan apa yang ingin di-build oleh symfony dan Doctrine. Task ini mereplikasi fungsionalitas dibanyak kombinasi task-task yang sudah ada, yang telah dideprecated karena adanya solusi yang lebih fleksibel ini.

Berikut ini adalah beberapa kemungkinan penggunaan doctrine:build:

http://wildanm.wordpress.com

Page 19: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 19

$ php symfony doctrine:build --db --and-load

Ini akan men-drop (:drop-db) dan membuat (:build-db) database, membuat tabel-tabel yang telah dikonfigurasi di schema.yml (:insert-sql) dan me-load data fixture(:data-load).

$ php symfony doctrine:build --all-classes --and-migrate

Hal ini akan mem-build model (:build-model), form (:build-forms) dan filter-filter form

(:build-filters) dan menjalankan migrasi yang masih pending (:migrate).

$ php symfony doctrine:build --model --and-migrate --and-append=data/fixtures/categories.yml

Ini akan mem-build model (:build-model), memigrasu database (:migrate) dan menambahkan data fixture kategori (:data-load --append --dir=data/fixtures/categories.yml).

Untuk informasi lebih jauh silahkan lihat halaman informasi tentang task doctrine:build.

Opsi baru: --migrate

Task-task berikut sekarang memiliki opsi --migrate, yang akan mengganti task doctrine:insert-sql dengan doctrine:migrate.

• doctrine:build-all • doctrine:build-all-load • doctrine:build-all-reload • doctrine:build-all-reload-test-all • doctrine:rebuild-db • doctrine:reload-data

doctrine:generate-migration --editor-cmd

Task doctrine:generate-migration sekarang memiliki opsi --editor-cmd yang akan tereksekusi ketika class migration dibuat untuk memudahkan pengeditan.

$ php symfony doctrine:generate-migration AddUserEmailColumn --editor-cmd=mate

Contoh ini akan menggenerate class migration baru dan membuka file baru di TextMate.

Date Setters dan Getters

Kami tekah menambahkan dua method baru untuk mengambil nilai tanggal atau timestamp Doctrine sebagai instance dari object DateTime PHP.

echo $article->getDateTimeObject('created_at')

http://wildanm.wordpress.com

Page 20: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 20

->format('m/d/Y');

Anda juga dapat men-set nilai cukup dengan memanggil method setDateTimeObject dan melewatkan instance DateTime yang valid.

$article->setDateTimeObject('created_at', new DateTime('09/01/1985'));

Output Task DQL sebagai Data dalam bentuk Table

Sebelumnya, ketika anda menjalankan perintah doctrine:dql ia akan mengeluarkan output data sebagai YAML. Kita telah menambahkan opsi yang baru, --table. Opsi ini akan memperbolehkan anda untuk mengeluarkan data dalam bentuk tabel, sama dengan ouput pada perintah command line MySQL.

Jadi sekarang, hal berikut ini dapat dilakukan.

$ ./symfony doctrine:dql "FROM Article a" --table

>> doctrine executing dql query

DQL: FROM Article a

+----+-----------+----------------+---------------------+---------------------+

| id | author_id | is_on_homepage | created_at | updated_at |

+----+-----------+----------------+---------------------+---------------------+

| 1 | 1 | | 2009-07-07 18:02:24 | 2009-07-07 18:02:24 |

| 2 | 2 | | 2009-07-07 18:02:24 | 2009-07-07 18:02:24 |

+----+-----------+----------------+---------------------+---------------------+

(2 results)

Debugging query pada functional tests

Class sfTesterDoctrine sekarang memiliki method ->debug(). Method ini akan mengeluarkan output informasi tentang query-query yang telah berjalan pada context saat ini.

$browser->

get('/articles')->

with('doctrine')->debug()

;

Anda dapat melihat hanya beberapa query terakhir yang dieksekusi dengan melewatkan sebuah integer ke method, atau hanya menunjukkan query yang mengandung sebuah substring atau mencocokkan dengan regular expression dengan melewatkan sebuah string.

$browser->

http://wildanm.wordpress.com

Page 21: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 21

get('/articles')->

with('doctrine')->debug('/from articles/i')

;

sfFormFilterDoctrine

Class sfFormFilterDoctrine sekarang dapat menerima object Doctrine_Query melalui opsi query:

$filter = new ArticleFormFilter(array(), array(

'query' => $table->createQuery()->select('title, body'),

));

Method table yang ditentukan via ->setTableMethod() (atau sekarang via opsi table_method ) tidak lagi diperlukan untuk me-return object query. Kode manapun dibawah ini valid method-method table sfFormFilterDoctrine :

// berjalan pada symfony >= 1.2

public function getQuery()

{

return $this->createQuery()->select('title, body');

}

// berjalan pada symfony >= 1.2

public function filterQuery(Doctrine_Query $query)

{

return $query->select('title, body');

}

// berjalan pada symfony >= 1.3

public function modifyQuery(Doctrine_Query $query)

{

$query->select('title, body');

}

http://wildanm.wordpress.com

Page 22: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 22

Toolbar Web Debug

sfWebDebugPanel::setStatus()

Setiap panel pada toolbar web debug dapat menentukan sebuah status yang akan mempengaruhio warna background.Misalnya, warna backrground judul panel log berubah jika ada pesan apapun dengan prioritas lebih dari sfLogger::INFO tercatat.

Paremeter request sfWebDebugPanel

Sekarang anda dapat menentukan sebuah panel yang akan dibuka ketika halaman diload dengan menambahkan parameter sfWebDebugPanel pada URL. Sebagai contoh, menambahkan ?sfWebDebugPanel=config akan menyebahkan toolbar web debug dirender dengan panel config terbuka.

Panel juga dapat memeriksa parameter-parameter request dengan mengakses opsi web debug

request_parameters :

$requestParameters = $this->webDebug->getOption('request_parameters');

Partial

Perbaikan Slot

Helper-helper get_slot() dan include_slot() sekarang menerima parameter kedua untuk menentukan content slot default yang di-return jika tidak ada yang disediakan oleh slot :

<?php echo get_slot('foo', 'bar') // akan memberikan output 'bar' jika slot 'foo' tidak didefinisikan ?>

<?php include_slot('foo', 'bar') // akan memberikan 'bar' jika slot 'foo' tidak didefinisikan ?>

PagerMethod sfDoctrinePager dan sfPropelPager sekarang mengimplementasikan interface Iterator dan Countable.

<?php if (count($pager)): ?>

<ul>

<?php foreach ($pager as $article): ?>

<li><?php echo link_to($article->getTitle(), 'article_show', $article) ?></li>

http://wildanm.wordpress.com

Page 23: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 23

<?php endforeach; ?>

</ul>

<?php else: ?>

<p>No results.</p>

<?php endif; ?>

Cache View Manager cache ciew sekarang menerima parameter di factories.yml. Menggenerate key cache untuk sebuah view telah di-refactor pada method-method yang berbeda untuk mempermudah proses ekstend class.

Dua parameter tersedia di factories.yml:

• cache_key_use_vary_headers (default: true): menentukan jika key cache harus memasukkan bagian header yang bervariasi. Pada prakteknya, artinya jika cache halaman harus bergantung pada http header, seperti ditentukan pada parameter cache vary .

• cache_key_use_host_name (default: true): menentukan apakah key cache harus memasukkan bagia nama host. Pada praktiknya, artinya jika cache halaman harus bergantung pada nama host.

Request

getContent()

Konten dari request sekarang dapat diakses melalui method getContent().

Parameter PUT dan DELETE

Ketika request datang baik dengan method HTTP PUT atau DELETE dengan content type di set dengan application/x-www-form-urlencoded, symfony sekarang memparsing raw body dan membuat parameter-parameter dapat diakses seperti halnya parameter-parameter POST normal..

Action

redirect()

Keluarga method sfAction::redirect() sekarang kompatibel dengan signature url_for() yang diperkenalkan di symfony 1.2:

// symfony 1.2

$this->redirect(array('sf_route' => 'article_show', 'sf_subject'

http://wildanm.wordpress.com

Page 24: Apa yang baru di symfony 1.3 ?

Apa yang Baru di symfony 1.3 ? 24

=> $article));

// symfony 1.3

$this->redirect('article_show', $article);

Perbaikan jika dilakukan pada redirectIf() and redirectUnless().

Helper

link_to_if(), link_to_unless()

Helper link_to_if() and link_to_unless() sekarang kompatibel dengan signature e link_to() yang diperkenalkan pada symfony 1.2:

// symfony 1.2

<?php echo link_to_unless($foo, '@article_show?id='.$article->getId()) ?>

// symfony 1.3

<?php echo link_to_unless($foo, 'article_show', $article) ?>

http://wildanm.wordpress.com