Symfony2 Development Basics – Diving Into Symfony2 Bundles
The Symfony2 framework brings a significant revolution when compared to its previous versions. Luckily, with the MVC architecture at its core, it would not be so difficult for the experienced developers to build applications using Symfony2 framework. Starting from Autoloading, console to the performance Symfony2 development brings a whole host of innovative and useful enhancements for the developers willing to dive into Symfony2 development.

One of the major enhancements that developers love is “Bundles”. It is totally different from what you were using in Symfony 1.4 or other versions. In Symfony 2, the concept of plug-ins is replaced by “bundles”. Bundles are more powerful than plug-ins as the core Symfony 2 framework is brought through a series of bundles. In Symfony 1, you will have to enable plug-ins within the ProjectConfiguration class. On the other hand, bundles in Symfony 2 are activated within the application kernel itself.

So, what are bundles?
A bundle is nothing but a directory having a well-defined structure and can host anything from classes to the controllers and web resources. Symfony 2.0 brings a wide range of useful bundles for the developers to leverage from when building applications. Most of the bundles are hosted on Git Hub and have extremely comprehensive installation instructions. Of course, bundles are very flexible, but it requires you to follow the best practices if you wish get maximum benefit from it.

• A bundle is a PHP namespace. A namespace becomes a bundle as soon as you add a bundle class to it. Therefore, it is important that bundle class name follows a few simple rules like use only alphanumeric characters and underscores, use a CamelCased name, use a descriptive and short name, prefix the name with the concatenation of the vendor, suffix the name with the Bundle. Make sure you’re aware about all the valid namespaces and class names.

• Get familiar with the directory structure. Make sure you include a few mandatory files like HelloBundle.php, Resources/meta/LICENSE and Resources/doc/index.rest. When building a reusable bundle, model classes should be placed in the Model namespace.

• Ensure that all the classes within bundles follow Symfony2 coding standards.

• A bundle must not embed third-party PHP libraries. It should rely on the standard Symfony2 autoloading instead.

• If a bundle provides routes, it must be prefixed with the bundle alias. For an AcmeBlogBundle for instance, all routes must be prefixed with acme_blog.

• If a bundle provides message translations, they must be defined in the XLIFF format.

A few of the useful bundles you can leverage for your application development:

KnpPaginatorBundle: Based on Knp Pager component, this bundle is an SEO friendly Symfony2 paginator to help developers paginate almost anything. It introduces a totally innovative way for pagination handling within the application.

Gaufrette: If you’re looking for multiple file system support, this bundle is what you need. It is a PHP library that helps developers to leverage from a file system abstraction layer and supports multiple File Systems.

Gedmo: If you wish to include timestampable functionality within your application, this Doctrine2 extension in Symfony2 would help you do it on the go. SaleServant has used this bundle for timestampable feature.

OryzoneMediaStorageBundle: This bundle would help you abstract the process of storing and retrieving media files.
• NelmioSolariumBundle: Integration between Symfony2 and the Solarium Solr client.

DimeTimetrackerBundle: This bundle is used to create a timetracker REST api.

The list doesn’t end here, there are a lot of bundles you can find to fulfill your application development requirements. Hope this article would help you get an idea about the concept of Bundles in Symfony2 development, best practices to be followed while creating bundles and the popular bundles you can use within your applications.