The stock Symfony2 timezone field type organizes all of the Olson Timezone Identifiers in PHP by Continent and displays them to the user. This dropdown is pretty bad from a UI perspective. This bundles provides an alternate dropdown that is similar to the one found when choosing a time zone on a Windows computer.
This is my first symfony2 bundle, feedback welcome!
Edit your deps file and add the following:
[BertTimezoneBundle]
git=git://github.com/bertrandom/BertTimezoneBundle.git
target=/bundles/Bert/TimezoneBundle
Run the vendors install script:
bin/vendors install
This will pull down the latest version of this bundle from github. Alternatively you can just put the files in /vendor/bundles/Bert/TimezoneBundle
Next, add the namespace to the end of the registerNamespaces bit in autoload.php:
$loader->registerNamespaces(array(
'Symfony' => array(__DIR__.'/../vendor/symfony/src', __DIR__.'/../vendor/bundles'),
'Sensio' => __DIR__.'/../vendor/bundles',
.
.
.
'Bert' => __DIR__.'/../vendor/bundles',
));
Add the bundle in AppKernel.php:
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
.
.
.
new Bert\TimezoneBundle\BertTimezoneBundle(),
);
That's it, the field type should be ready to use.
Simply use the field type readabletimezone in your form builder, e.g.:
$builder
->add('username')
->add('plainPassword', 'repeated', array('type' => 'password'))
->add('firstname')
->add('lastname')
->add('email', 'email')
->add('timezone', 'readabletimezone')
;
The data is taken from the work of two blog posts on the subject of readable timezones:
Presenting a list of Timezones to the user
Olson Time Zone Database to Standard Windows Time Zone v0.1
I've made mirrors of these two posts and put them in Resources/source/mirrors/ in case the blog posts go away.
The timezone data itself can be found in Resources/config/timezones.yml
Bertrand Fan ([email protected])
Timezone data provided by Avi Block and Tim Davis, see Data section for more details.