Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 207
smoreno Avatar asked Dec 10 '22 03:12

smoreno


2 Answers

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.

like image 189
kgilden Avatar answered Feb 02 '23 02:02

kgilden


There is CurrencyType in Symfony 2.3.

It uses Intl component to get list of all currencies.

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/Extension/Core/Type/CurrencyType.php

like image 33
umpirsky Avatar answered Feb 02 '23 02:02

umpirsky