Search code examples
symfonycurrency

Currencies list in symfony2


I remember in symfony 1.x there was a "currency" field type, which was a select with all currencies in the world. Is there something like this in symfony2?


Solution

  • I couldn't find one, so I created one myself. I got the list from here

    This is a class for containing all the currencies

    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',
            );
        }
    }
    

    This is the actual form type

    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';
        }
    }
    

    I hope this helps.