This post is about symfony and doctrine behaviors which are useful for daily uses.
These behaviors allow us to speed up the application development and in this post we will find short descriptions about most common behaviors.
Basically, a behavior will give us some relationships, algorithms and other features between our business entities. Those behaviors are deeply configurable (they should be at least), that configurations include: activate/deactivate behavior features, rename some additional schema attributes, etc.
We can use many Doctrine’s behaviors in our projects, such as core behaviors, extension behaviors, symfony’s plugins, or well, we can build our own behaviors.
Core Behaviors
Doctrine already comes with many behaviors (core behaviors), those are:
- # Versionable – adds a new table to store our diferent versions of the entity to keep our entities versionable.
- # Timestampable – this probably is the most popular behavior, adds two new columns (created_at and updated_at) to automatically store the dates when the entity is created or updated respectively.
- # Sluggable – adds a new column (slug) which is unique and could be use by sfDoctrineRoute to refer the entity.
- # I18n – adds a new table to provide Internationalization (I18n) to our model, this behavior is esential when we develop multi-language apps.
- # NestedSet – adds a few columns (root_id, lft, rgt and level) to our entity to develop a hierarchy data structure (tree structure).
- # Searchable – choses the columns of our entity which we want to index and adds a new table, speeding up the search engine development.
- # Geographical – adds the longitude and latitude columns storing specific geographical coordinates, and provides us a getDistance() method to calculate the distance between 2 geographical entities.
- # SoftDelete – adds a new deleted_at column which defines if a record has been marked as deleted (and when). It is an useful behavior when we need important consistency data.
Extension Behaviors
Also, we can use the Doctrine exntesions:
- # Blameable – adds an additional level to audit our entities, it allows us to follow who has created or updated an entity.
- # EventLoggable – saves a log of every Doctrine’s event (pre/post Delete/Insert/…) used by a record.
- # Localizable – gives us the functionality to convert measure units (for instance, kilometers to miles).
- # Locatable – gives us the functionality to use Google Maps to automatically fill our entity with longitude and latitude information from Google.
- # Sortable – gives us the functionality to sort our entities.
- # Taggable – adds abilities to tagging, it creates two tables using m:n relationships and provides easy tags administration.
Plugin Behaviors
Finally, there are some symfony’s plugins which gives us more behaviors:
- # sfDoctrineActAsSignablePlugin – is a good alternative for the blameable Doctrine extension.
- # sfDoctrineActAsTaggablePlugin – provides tags administration (an alternative for the taggable Doctrine behavior), and gives us tags cloud generation.
- # csDoctrineActAsAttachablePlugin – joins many uploads with multiple entities.
- # sfDoctrineJCroppablePlugin – adds images user-croppable to our entities with a javascript image cropper.
- # sfDoctrineNestedSetPlugin – provides us a form and a validator giving us easy administration for the NestedSet behavior.
- # csDoctrineActAsCategorizablePlugin – Categories our entities, mix, match and split our entities into multiple nested/flat categories.
- # sfDoctrineActAsRattablePlugin – gives us pointing functionality to our entities.
- # vjCommentPlugin – provides us commentable behavior to comment our entities.
I hope this post is useful.