Your SlideShare is downloading. ×
Apa yang Baru di symfony 1.3 ?                                                                 1




               Apa ya...
Apa yang Baru di symfony 1.3 ?                                                                2

Apa yang baru di symfony ...
Apa yang Baru di symfony 1.3 ?                                                                   3

        CSRF diaktifka...
Apa yang Baru di symfony 1.3 ?                                                       4

        setFormFormatterName(), se...
Apa yang Baru di symfony 1.3 ?                                                                 5

Pesan Error Default
Seka...
Apa yang Baru di symfony 1.3 ?                                                                  6

Forms
sfForm::useFields...
Apa yang Baru di symfony 1.3 ?                                                               7

sfForm::doBind()
Proses pe...
Apa yang Baru di symfony 1.3 ?                                                                      8

Test
Mempercepat Te...
Apa yang Baru di symfony 1.3 ?                                                               9

$ php symfony test:all --x...
Apa yang Baru di symfony 1.3 ?                                                                     10

$browser->addListen...
Apa yang Baru di symfony 1.3 ?                                                                 11

$ php /path/to/symfony ...
Apa yang Baru di symfony 1.3 ?                                                             12

Versi sebelumnya akan tetap...
Apa yang Baru di symfony 1.3 ?                                                                13

$ php symfony project:di...
Apa yang Baru di symfony 1.3 ?                                                             14

      columns:
        id: ...
Apa yang Baru di symfony 1.3 ?                                                                 15

Pengurutan berdasarkan ...
Apa yang Baru di symfony 1.3 ?                                                                16

                  Jika a...
Apa yang Baru di symfony 1.3 ?                                                                 17

YAML Doctrine anda. Kit...
Apa yang Baru di symfony 1.3 ?                                                               18

maka anda akan memiliki c...
Apa yang Baru di symfony 1.3 ?                                                             19

$ php symfony doctrine:buil...
Apa yang Baru di symfony 1.3 ?                                                                 20

    ->format('m/d/Y');
...
Apa yang Baru di symfony 1.3 ?                                                          21

    get('/articles')->
    wit...
Apa yang Baru di symfony 1.3 ?                                                              22

Toolbar Web Debug
sfWebDeb...
Apa yang Baru di symfony 1.3 ?                                                           23

     <?php endforeach; ?>
  <...
Apa yang Baru di symfony 1.3 ?                                                    24

=> $article));


// symfony 1.3
$thi...
Upcoming SlideShare
Loading in...5
×

Apa yang baru di symfony 1.3 ?

2,213

Published on

Seri tulisan symfony framework

Published in: Sports, Technology, Design
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,213
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
37
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Apa yang baru di symfony 1.3 ?"

  1. 1. 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
  2. 2. 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. Mailer Mulai 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('from@example.com', 'to@example.com', '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('from@example.com', 'to@example.com', '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. Security Ketika 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
  3. 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
  4. 4. 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
  5. 5. 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() sfToolkit Method 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
  6. 6. 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
  7. 7. 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(). Autoloader Semua 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
  8. 8. 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
  9. 9. 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
  10. 10. Apa yang Baru di symfony 1.3 ? 10 $browser->addListener('context.load_factories', array($browser, 'listenForNewContext')); Tasks symfony 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
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. 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
  15. 15. 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-Plugin Sebelum 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
  16. 16. 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
  17. 17. 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
  18. 18. 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
  19. 19. 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
  20. 20. 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
  21. 21. 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
  22. 22. 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 ?> Pager Method 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
  23. 23. 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
  24. 24. 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

×