SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Mais conteúdo relacionado

Semelhante a Apa Symfony 1.3

Laravel Basic Development
Laravel Basic Development Laravel Basic Development
Laravel Basic Development ssuser1fd02a1
 
09071003002 session dan fungsinya
09071003002 session dan fungsinya09071003002 session dan fungsinya
09071003002 session dan fungsinyafebeniken
 
Memasang aplikasi phpindonesia_di_windows_7
Memasang aplikasi phpindonesia_di_windows_7Memasang aplikasi phpindonesia_di_windows_7
Memasang aplikasi phpindonesia_di_windows_7Cahya Dwiana SN
 
Wawan tutorial-zend-bagian-1-3
Wawan tutorial-zend-bagian-1-3Wawan tutorial-zend-bagian-1-3
Wawan tutorial-zend-bagian-1-3Haswi Haswi
 
Building Mail Server in FreeBSD
Building Mail Server in FreeBSDBuilding Mail Server in FreeBSD
Building Mail Server in FreeBSDHendrik Moch Yusro
 
Tugas so 2 defy ansar
Tugas so 2 defy ansarTugas so 2 defy ansar
Tugas so 2 defy ansarfhyanti
 
Ch7 10 bind
Ch7 10 bindCh7 10 bind
Ch7 10 bindAbu Geni
 
Tutorial VIM - Bahasa Indonesia - @sopier
Tutorial VIM - Bahasa Indonesia - @sopierTutorial VIM - Bahasa Indonesia - @sopier
Tutorial VIM - Bahasa Indonesia - @sopiersopier
 
Form validation dengan code igniter
Form validation dengan code igniterForm validation dengan code igniter
Form validation dengan code igniterEidelbert Sinaga
 
Tugas topik khusus
Tugas topik khususTugas topik khusus
Tugas topik khususwardandha
 
Pertemuan11 unix system call dan manajemen memory
Pertemuan11   unix system call dan manajemen memoryPertemuan11   unix system call dan manajemen memory
Pertemuan11 unix system call dan manajemen memorySyaiful Ahdan
 
Membuat Catatan Online dengan Cherrypy
Membuat Catatan Online dengan CherrypyMembuat Catatan Online dengan Cherrypy
Membuat Catatan Online dengan CherrypyRidwan Fadjar
 
07. Function.ppt
07. Function.ppt07. Function.ppt
07. Function.pptnewdehan
 
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONTutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONDimas Prawira
 
Belajar framework code igniter xii rpl
Belajar framework code igniter xii rplBelajar framework code igniter xii rpl
Belajar framework code igniter xii rplDenny Yahya
 

Semelhante a Apa Symfony 1.3 (20)

Mandriva
MandrivaMandriva
Mandriva
 
Laravel Basic Development
Laravel Basic Development Laravel Basic Development
Laravel Basic Development
 
09071003002 session dan fungsinya
09071003002 session dan fungsinya09071003002 session dan fungsinya
09071003002 session dan fungsinya
 
Praktikum 7
Praktikum 7Praktikum 7
Praktikum 7
 
Memasang aplikasi phpindonesia_di_windows_7
Memasang aplikasi phpindonesia_di_windows_7Memasang aplikasi phpindonesia_di_windows_7
Memasang aplikasi phpindonesia_di_windows_7
 
Wawan tutorial-zend-bagian-1-3
Wawan tutorial-zend-bagian-1-3Wawan tutorial-zend-bagian-1-3
Wawan tutorial-zend-bagian-1-3
 
Building Mail Server in FreeBSD
Building Mail Server in FreeBSDBuilding Mail Server in FreeBSD
Building Mail Server in FreeBSD
 
Webmin faq
Webmin faqWebmin faq
Webmin faq
 
Tugas so 2 defy ansar
Tugas so 2 defy ansarTugas so 2 defy ansar
Tugas so 2 defy ansar
 
FreeBSD web-based MUA
FreeBSD web-based MUAFreeBSD web-based MUA
FreeBSD web-based MUA
 
Ch7 10 bind
Ch7 10 bindCh7 10 bind
Ch7 10 bind
 
Tutorial VIM - Bahasa Indonesia - @sopier
Tutorial VIM - Bahasa Indonesia - @sopierTutorial VIM - Bahasa Indonesia - @sopier
Tutorial VIM - Bahasa Indonesia - @sopier
 
Form validation dengan code igniter
Form validation dengan code igniterForm validation dengan code igniter
Form validation dengan code igniter
 
Tugas topik khusus
Tugas topik khususTugas topik khusus
Tugas topik khusus
 
Pertemuan11 unix system call dan manajemen memory
Pertemuan11   unix system call dan manajemen memoryPertemuan11   unix system call dan manajemen memory
Pertemuan11 unix system call dan manajemen memory
 
Membuat Catatan Online dengan Cherrypy
Membuat Catatan Online dengan CherrypyMembuat Catatan Online dengan Cherrypy
Membuat Catatan Online dengan Cherrypy
 
Pertemuan11
Pertemuan11Pertemuan11
Pertemuan11
 
07. Function.ppt
07. Function.ppt07. Function.ppt
07. Function.ppt
 
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONTutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
 
Belajar framework code igniter xii rpl
Belajar framework code igniter xii rplBelajar framework code igniter xii rpl
Belajar framework code igniter xii rpl
 

Mais de Wildan Maulana

Hasil Pendataan Potensi Desa 2018
Hasil Pendataan Potensi Desa 2018Hasil Pendataan Potensi Desa 2018
Hasil Pendataan Potensi Desa 2018Wildan Maulana
 
Double for Nothing? Experimental Evidence on an Unconditional TeacherSalary I...
Double for Nothing? Experimental Evidence on an Unconditional TeacherSalary I...Double for Nothing? Experimental Evidence on an Unconditional TeacherSalary I...
Double for Nothing? Experimental Evidence on an Unconditional TeacherSalary I...Wildan Maulana
 
Ketahanan Pangan #1 : Gerakan Sekolah Menanam Melon
Ketahanan Pangan #1 : Gerakan Sekolah Menanam MelonKetahanan Pangan #1 : Gerakan Sekolah Menanam Melon
Ketahanan Pangan #1 : Gerakan Sekolah Menanam MelonWildan Maulana
 
Pengembangan OpenThink SAS 2013-2014
Pengembangan OpenThink SAS 2013-2014Pengembangan OpenThink SAS 2013-2014
Pengembangan OpenThink SAS 2013-2014Wildan Maulana
 
ICA – AtoM : Retensi Arsip
ICA – AtoM : Retensi ArsipICA – AtoM : Retensi Arsip
ICA – AtoM : Retensi ArsipWildan Maulana
 
OpenThink Labs Workshop : Ketahanan Pangan Skala RT/RW
OpenThink Labs Workshop : Ketahanan Pangan Skala RT/RWOpenThink Labs Workshop : Ketahanan Pangan Skala RT/RW
OpenThink Labs Workshop : Ketahanan Pangan Skala RT/RWWildan Maulana
 
OpenThink Labs : Dengar Pendapat Komunitas ciliwung dengan kemen pu dan kemen...
OpenThink Labs : Dengar Pendapat Komunitas ciliwung dengan kemen pu dan kemen...OpenThink Labs : Dengar Pendapat Komunitas ciliwung dengan kemen pu dan kemen...
OpenThink Labs : Dengar Pendapat Komunitas ciliwung dengan kemen pu dan kemen...Wildan Maulana
 
PostgreSQL BootCamp : Manajemen Master Data dengan SkyTools
PostgreSQL BootCamp : Manajemen Master Data dengan SkyToolsPostgreSQL BootCamp : Manajemen Master Data dengan SkyTools
PostgreSQL BootCamp : Manajemen Master Data dengan SkyToolsWildan Maulana
 
Mensetup Google Apps sebagai IdP jenis openID dan Aplikasi Berbasis CakePHP ...
Mensetup Google Apps sebagai IdP jenis openID  dan Aplikasi Berbasis CakePHP ...Mensetup Google Apps sebagai IdP jenis openID  dan Aplikasi Berbasis CakePHP ...
Mensetup Google Apps sebagai IdP jenis openID dan Aplikasi Berbasis CakePHP ...Wildan Maulana
 
Mensetup Google Apps sebagai IdP jenis openID dan Wordpress sebagai Sp
Mensetup Google Apps sebagai IdP jenis openID dan Wordpress sebagai SpMensetup Google Apps sebagai IdP jenis openID dan Wordpress sebagai Sp
Mensetup Google Apps sebagai IdP jenis openID dan Wordpress sebagai SpWildan Maulana
 
Konfigurasi simpleSAMLphp dengan Google Apps Sebagai Identity Provider
Konfigurasi simpleSAMLphp  dengan Google Apps Sebagai Identity ProviderKonfigurasi simpleSAMLphp  dengan Google Apps Sebagai Identity Provider
Konfigurasi simpleSAMLphp dengan Google Apps Sebagai Identity ProviderWildan Maulana
 
Instalasi simpleSAMLphp sebagai Identity Provider (IdP)
Instalasi simpleSAMLphp sebagai Identity Provider (IdP)Instalasi simpleSAMLphp sebagai Identity Provider (IdP)
Instalasi simpleSAMLphp sebagai Identity Provider (IdP)Wildan Maulana
 
Instalasi dan Konfigurasi simpleSAMLphp
Instalasi dan Konfigurasi simpleSAMLphpInstalasi dan Konfigurasi simpleSAMLphp
Instalasi dan Konfigurasi simpleSAMLphpWildan Maulana
 
River Restoration in Asia and Connection Between IWRM and River Restoration
River Restoration in Asia and Connection Between IWRM and River RestorationRiver Restoration in Asia and Connection Between IWRM and River Restoration
River Restoration in Asia and Connection Between IWRM and River RestorationWildan Maulana
 
Optimasi Limpasan Air Limbah Ke Kali Surabaya (Segmen Sepanjang – Jagir) De...
Optimasi Limpasan Air Limbah  Ke Kali Surabaya (Segmen Sepanjang – Jagir)  De...Optimasi Limpasan Air Limbah  Ke Kali Surabaya (Segmen Sepanjang – Jagir)  De...
Optimasi Limpasan Air Limbah Ke Kali Surabaya (Segmen Sepanjang – Jagir) De...Wildan Maulana
 
Penilaian Siswa di Finlandia - Pendidikan Dasar
Penilaian Siswa di Finlandia - Pendidikan DasarPenilaian Siswa di Finlandia - Pendidikan Dasar
Penilaian Siswa di Finlandia - Pendidikan DasarWildan Maulana
 
Proyek Al-'Alaq : Electric Bicycles ; History, Characteristics, and Uses
Proyek Al-'Alaq : Electric Bicycles ; History, Characteristics, and UsesProyek Al-'Alaq : Electric Bicycles ; History, Characteristics, and Uses
Proyek Al-'Alaq : Electric Bicycles ; History, Characteristics, and UsesWildan Maulana
 
OpenThink SAS : Interaksi Antara Sekolah, Wali Kelas, Siswa dan Orang Tua
OpenThink SAS : Interaksi Antara Sekolah, Wali Kelas, Siswa dan Orang TuaOpenThink SAS : Interaksi Antara Sekolah, Wali Kelas, Siswa dan Orang Tua
OpenThink SAS : Interaksi Antara Sekolah, Wali Kelas, Siswa dan Orang TuaWildan Maulana
 
Menggunakan AlisJK : Equating
Menggunakan AlisJK : EquatingMenggunakan AlisJK : Equating
Menggunakan AlisJK : EquatingWildan Maulana
 

Mais de Wildan Maulana (20)

Hasil Pendataan Potensi Desa 2018
Hasil Pendataan Potensi Desa 2018Hasil Pendataan Potensi Desa 2018
Hasil Pendataan Potensi Desa 2018
 
Double for Nothing? Experimental Evidence on an Unconditional TeacherSalary I...
Double for Nothing? Experimental Evidence on an Unconditional TeacherSalary I...Double for Nothing? Experimental Evidence on an Unconditional TeacherSalary I...
Double for Nothing? Experimental Evidence on an Unconditional TeacherSalary I...
 
Ketahanan Pangan #1 : Gerakan Sekolah Menanam Melon
Ketahanan Pangan #1 : Gerakan Sekolah Menanam MelonKetahanan Pangan #1 : Gerakan Sekolah Menanam Melon
Ketahanan Pangan #1 : Gerakan Sekolah Menanam Melon
 
Pengembangan OpenThink SAS 2013-2014
Pengembangan OpenThink SAS 2013-2014Pengembangan OpenThink SAS 2013-2014
Pengembangan OpenThink SAS 2013-2014
 
ICA – AtoM : Retensi Arsip
ICA – AtoM : Retensi ArsipICA – AtoM : Retensi Arsip
ICA – AtoM : Retensi Arsip
 
OpenThink Labs Workshop : Ketahanan Pangan Skala RT/RW
OpenThink Labs Workshop : Ketahanan Pangan Skala RT/RWOpenThink Labs Workshop : Ketahanan Pangan Skala RT/RW
OpenThink Labs Workshop : Ketahanan Pangan Skala RT/RW
 
OpenThink Labs : Dengar Pendapat Komunitas ciliwung dengan kemen pu dan kemen...
OpenThink Labs : Dengar Pendapat Komunitas ciliwung dengan kemen pu dan kemen...OpenThink Labs : Dengar Pendapat Komunitas ciliwung dengan kemen pu dan kemen...
OpenThink Labs : Dengar Pendapat Komunitas ciliwung dengan kemen pu dan kemen...
 
PostgreSQL BootCamp : Manajemen Master Data dengan SkyTools
PostgreSQL BootCamp : Manajemen Master Data dengan SkyToolsPostgreSQL BootCamp : Manajemen Master Data dengan SkyTools
PostgreSQL BootCamp : Manajemen Master Data dengan SkyTools
 
Mensetup Google Apps sebagai IdP jenis openID dan Aplikasi Berbasis CakePHP ...
Mensetup Google Apps sebagai IdP jenis openID  dan Aplikasi Berbasis CakePHP ...Mensetup Google Apps sebagai IdP jenis openID  dan Aplikasi Berbasis CakePHP ...
Mensetup Google Apps sebagai IdP jenis openID dan Aplikasi Berbasis CakePHP ...
 
Mensetup Google Apps sebagai IdP jenis openID dan Wordpress sebagai Sp
Mensetup Google Apps sebagai IdP jenis openID dan Wordpress sebagai SpMensetup Google Apps sebagai IdP jenis openID dan Wordpress sebagai Sp
Mensetup Google Apps sebagai IdP jenis openID dan Wordpress sebagai Sp
 
Konfigurasi simpleSAMLphp dengan Google Apps Sebagai Identity Provider
Konfigurasi simpleSAMLphp  dengan Google Apps Sebagai Identity ProviderKonfigurasi simpleSAMLphp  dengan Google Apps Sebagai Identity Provider
Konfigurasi simpleSAMLphp dengan Google Apps Sebagai Identity Provider
 
Instalasi simpleSAMLphp sebagai Identity Provider (IdP)
Instalasi simpleSAMLphp sebagai Identity Provider (IdP)Instalasi simpleSAMLphp sebagai Identity Provider (IdP)
Instalasi simpleSAMLphp sebagai Identity Provider (IdP)
 
Instalasi dan Konfigurasi simpleSAMLphp
Instalasi dan Konfigurasi simpleSAMLphpInstalasi dan Konfigurasi simpleSAMLphp
Instalasi dan Konfigurasi simpleSAMLphp
 
River Restoration in Asia and Connection Between IWRM and River Restoration
River Restoration in Asia and Connection Between IWRM and River RestorationRiver Restoration in Asia and Connection Between IWRM and River Restoration
River Restoration in Asia and Connection Between IWRM and River Restoration
 
Optimasi Limpasan Air Limbah Ke Kali Surabaya (Segmen Sepanjang – Jagir) De...
Optimasi Limpasan Air Limbah  Ke Kali Surabaya (Segmen Sepanjang – Jagir)  De...Optimasi Limpasan Air Limbah  Ke Kali Surabaya (Segmen Sepanjang – Jagir)  De...
Optimasi Limpasan Air Limbah Ke Kali Surabaya (Segmen Sepanjang – Jagir) De...
 
Penilaian Siswa di Finlandia - Pendidikan Dasar
Penilaian Siswa di Finlandia - Pendidikan DasarPenilaian Siswa di Finlandia - Pendidikan Dasar
Penilaian Siswa di Finlandia - Pendidikan Dasar
 
Statistik Listrik
Statistik ListrikStatistik Listrik
Statistik Listrik
 
Proyek Al-'Alaq : Electric Bicycles ; History, Characteristics, and Uses
Proyek Al-'Alaq : Electric Bicycles ; History, Characteristics, and UsesProyek Al-'Alaq : Electric Bicycles ; History, Characteristics, and Uses
Proyek Al-'Alaq : Electric Bicycles ; History, Characteristics, and Uses
 
OpenThink SAS : Interaksi Antara Sekolah, Wali Kelas, Siswa dan Orang Tua
OpenThink SAS : Interaksi Antara Sekolah, Wali Kelas, Siswa dan Orang TuaOpenThink SAS : Interaksi Antara Sekolah, Wali Kelas, Siswa dan Orang Tua
OpenThink SAS : Interaksi Antara Sekolah, Wali Kelas, Siswa dan Orang Tua
 
Menggunakan AlisJK : Equating
Menggunakan AlisJK : EquatingMenggunakan AlisJK : Equating
Menggunakan AlisJK : Equating
 

Apa Symfony 1.3

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