2012-01-14 119 views

回答

8

我找不到一個,所以我自己創建了一個。我從here

名單這是包含所有貨幣

namespace Gilden\Bundle\InvoiceBundle\Form\Extension\ChoiceList; 

use Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface; 

/** 
* Choice list for ISO currencies found on http://www.xe.com/iso4217.php 
*/ 
class CurrencyChoiceList implements ChoiceListInterface 
{ 
    public function getChoices() 
    { 
     return array(
      'AED' => 'AED', 'AFN' => 'AFN', 'ALL' => 'ALL', 
      'AMD' => 'AMD', 'ANG' => 'ANG', 'AOA' => 'AOA', 
      'ARS' => 'ARS', 'AUD' => 'AUD', 'AWG' => 'AWG', 
      'AZN' => 'AZN', 'BAM' => 'BAM', 'BBD' => 'BBD', 
      'BDT' => 'BDT', 'BGN' => 'BGN', 'BHD' => 'BHD', 
      'BIF' => 'BIF', 'BMD' => 'BMD', 'BND' => 'BND', 
      'BOB' => 'BOB', 'BRL' => 'BRL', 'BSD' => 'BSD', 
      'BTN' => 'BTN', 'BWP' => 'BWP', 'BYR' => 'BYR', 
      'BZD' => 'BZD', 'CAD' => 'CAD', 'CDF' => 'CDF', 
      'CHF' => 'CHF', 'CLP' => 'CLP', 'CNY' => 'CNY', 
      'COP' => 'COP', 'CRC' => 'CRC', 'CUC' => 'CUC', 
      'CUP' => 'CUP', 'CVE' => 'CVE', 'CZK' => 'CZK', 
      'DJF' => 'DJF', 'DKK' => 'DKK', 'DOP' => 'DOP', 
      'DZD' => 'DZD', 'EGP' => 'EGP', 'ERN' => 'ERN', 
      'ETB' => 'ETB', 'EUR' => 'EUR', 'FJD' => 'FJD', 
      'FKP' => 'FKP', 'GBP' => 'GBP', 'GEL' => 'GEL', 
      'GGP' => 'GGP', 'GHS' => 'GHS', 'GIP' => 'GIP', 
      'GMD' => 'GMD', 'GNF' => 'GNF', 'GTQ' => 'GTQ', 
      'GYD' => 'GYD', 'HKD' => 'HKD', 'HNL' => 'HNL', 
      'HRK' => 'HRK', 'HTG' => 'HTG', 'HUF' => 'HUF', 
      'IDR' => 'IDR', 'ILS' => 'ILS', 'IMP' => 'IMP', 
      'INR' => 'INR', 'IQD' => 'IQD', 'IRR' => 'IRR', 
      'ISK' => 'ISK', 'JEP' => 'JEP', 'JMD' => 'JMD', 
      'JOD' => 'JOD', 'JPY' => 'JPY', 'KES' => 'KES', 
      'KGS' => 'KGS', 'KHR' => 'KHR', 'KMF' => 'KMF', 
      'KPW' => 'KPW', 'KRW' => 'KRW', 'KWD' => 'KWD', 
      'KYD' => 'KYD', 'KZT' => 'KZT', 'LAK' => 'LAK', 
      'LBP' => 'LBP', 'LKR' => 'LKR', 'LRD' => 'LRD', 
      'LSL' => 'LSL', 'LTL' => 'LTL', 'LVL' => 'LVL', 
      'LYD' => 'LYD', 'MAD' => 'MAD', 'MDL' => 'MDL', 
      'MGA' => 'MGA', 'MKD' => 'MKD', 'MMK' => 'MMK', 
      'MNT' => 'MNT', 'MOP' => 'MOP', 'MRO' => 'MRO', 
      'MUR' => 'MUR', 'MVR' => 'MVR', 'MWK' => 'MWK', 
      'MXN' => 'MXN', 'MYR' => 'MYR', 'MZN' => 'MZN', 
      'NAD' => 'NAD', 'NGN' => 'NGN', 'NIO' => 'NIO', 
      'NOK' => 'NOK', 'NPR' => 'NPR', 'NZD' => 'NZD', 
      'OMR' => 'OMR', 'PAB' => 'PAB', 'PEN' => 'PEN', 
      'PGK' => 'PGK', 'PHP' => 'PHP', 'PKR' => 'PKR', 
      'PLN' => 'PLN', 'PYG' => 'PYG', 'QAR' => 'QAR', 
      'RON' => 'RON', 'RSD' => 'RSD', 'RUB' => 'RUB', 
      'RWF' => 'RWF', 'SAR' => 'SAR', 'SBD' => 'SBD', 
      'SCR' => 'SCR', 'SDG' => 'SDG', 'SEK' => 'SEK', 
      'SGD' => 'SGD', 'SHP' => 'SHP', 'SLL' => 'SLL', 
      'SOS' => 'SOS', 'SPL' => 'SPL', 'SRD' => 'SRD', 
      'STD' => 'STD', 'SVC' => 'SVC', 'SYP' => 'SYP', 
      'SZL' => 'SZL', 'THB' => 'THB', 'TJS' => 'TJS', 
      'TMT' => 'TMT', 'TND' => 'TND', 'TOP' => 'TOP', 
      'TRY' => 'TRY', 'TTD' => 'TTD', 'TVD' => 'TVD', 
      'TWD' => 'TWD', 'TZS' => 'TZS', 'UAH' => 'UAH', 
      'UGX' => 'UGX', 'USD' => 'USD', 'UYU' => 'UYU', 
      'UZS' => 'UZS', 'VEF' => 'VEF', 'VND' => 'VND', 
      'VUV' => 'VUV', 'WST' => 'WST', 'XAF' => 'XAF', 
      'XCD' => 'XCD', 'XDR' => 'XDR', 'XOF' => 'XOF', 
      'XPF' => 'XPF', 'YER' => 'YER', 'ZAR' => 'ZAR', 
      'ZMK' => 'ZMK', 'ZWD' => 'ZWD', 
     ); 
    } 
} 

類這是實際的表單類型

namespace Gilden\Bundle\InvoiceBundle\Form\Extension\Type; 

use Gilden\Bundle\InvoiceBundle\Form\Extension\ChoiceList\CurrencyChoiceList; 
use Symfony\Component\Form\AbstractType; 

class CurrencyType extends AbstractType 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function getDefaultOptions(array $options) 
    { 
     return array(
      'choice_list'  => new CurrencyChoiceList(), 
      'preferred_choices' => array('EUR', 'USD', 'RUB', 'LVL', 'LTL') 
     ); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public function getParent(array $options) 
    { 
     return 'choice'; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public function getName() 
    { 
     return 'currency'; 
    } 
} 

我希望這有助於。

+0

謝謝gilden。你的選擇清單工作。但錯過貨幣的完整名稱(歐元=>歐元,美元=>美元)以及在用戶區域顯示貨幣名稱的可能性。真的,我不明白爲什麼在symfony2中錯過了symfony 1.x有一些非常有用的功能。貨幣示例列表,日期範圍字段類型,日期範圍驗證程序約束。 – smoreno 2012-01-14 14:30:08

+1

@smoreno完整的名稱在每種語言中都不相同,因此使用[翻譯](http://symfony.com/doc/2.0/book/translation.html)是明智的。您還需要[自定義表單窗口小部件](http://symfony.com/doc/2.0/cookbook/form/form_customization.html#how-to-customize-an-individual-field),但這一切都會降臨超出這個問題的範圍已經:) – gilden 2012-01-14 14:38:20