Symfony 2 is quite awesome, and what I really like is the ability to switch out any component with another component. Ever since I started building applications with Symfony one thing really has bothered me, and that was Doctrine. It just did not feel natural to use it.
Lucky me, there is an alternative: Propel ORM. Have a look yourself. You can easily migrate existing projects, it does have the features needed to build something, and it has it’s very own way of forcing you into database independent development. On top of that I like the schema definitions and fixtures a lot.
Now let us switch the default Symfony project to Propel. First I recommend to install Composer.
Using Composer we create a project template:
$ php composer.phar create-project symfony/framework-standard-edition my-project/ 2.1.6
Next we will remove Doctrine and add Propel to the Composer file. Edit
- "doctrine/orm": ">=2.2.3,<2.4-dev", - "doctrine/doctrine-bundle": "1.0.*", + "propel/propel-bundle": "1.1.*",
With this we have removed the Doctrine ORM and the Symfony bundle. Now we need to
- new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), + new Propel\PropelBundle\PropelBundle(),
The Symfony configuration in
app/config/config.yml also needs a bit of love
-# Doctrine Configuration -doctrine: - dbal: - driver: %database_driver% - host: %database_host% - port: %database_port% - dbname: %database_name% - user: %database_user% - password: %database_password% - charset: UTF8 - - orm: - auto_generate_proxy_classes: %kernel.debug% - auto_mapping: true +# Propel Configuration +propel: + dbal: + driver: "%database_driver%" + user: "%database_user%" + password: "%database_password%" + dsn: "%database_driver%:host=%database_host%;dbname=%database_name%;charset=%database_charset%"
Last – but not least – we need to edit
parameters: database_driver: pdo_mysql database_host: localhost - database_port: ~ database_name: symfony database_user: root database_password: ~ + database_charset: UTF8
To finalize the switch to Propel, we run Composer once
$ composer update
After a few moments, we are done. You now have a Propel enabled Symfony2
template. The application console now sports a lot of
Try the Propel documentation for an overview of the nifty things Propel can do for you.