Doctrine Carbon Bundle
Automatically fetch your Doctrine DateTimes as Carbon instances in Symfony.
Installation
To install, simply run at your project root:
composer require mnavarrocarter/doctrine-carbon-bundle
While composer is working, thank @Jordi and enable the bundle in your AppKernel:
// app/AppKernel.php
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
new MNC\DoctrineCarbonBundle\MNCDoctrineCarbonBundle(),
);
// ...
}
// ...
}
How it works
MNCDoctrineCarbonBundle leverages the popular Carbon library as a service in order to convert your DateTime instances to Carbon ones.
By default, it listens for createdAt
, updatedAt
and deletedAt
properties
in your Entities (and their getters and setters) and transforms them into Carbon
instances everytime you fetch them from the database, so you can do cool things like:
$entity->getCreatedAt()->diffForHumans() // Ex, Outputs '21 months ago'.
Since MNCDoctrineCarbonBundle listens for those fields by default, it's a perfect companion if you have libraries like StofDoctrineExtensionsBundle in your project.
Specifying other properties names
In your config.yml file you can specify the properties to listen to:
# app/config/config.yml
# ...
mnc_doctrine_carbon:
properties: ['createdAt', 'editedAt', 'publishedAt'] # Array of property names
Note that you need camelCase getters and setters for the properties you desire to convert in order for MNCDoctrineCarbonBundle to do it correctly. Note also that when a property doesn't exist in a class, it's ignored completely and errors are not triggered.
Fine Graining
As from 1.1.0 you can use the special @Carbon
annotation to convert a single DateTime property into a Carbon instance.
<?php
class Entity {
use MNC\DoctrineCarbonBundle\Annotations;
/**
* @ORM\Column(type="datetime")
* @Carbon()
*/
private $publishedAt;
}
What is Carbon?
Carbon is a library that serves as a wrapper to php's DateTime built-in class, providing an easy-to-use and richly-featured API to make common operations with date and time a trivial and delightful task.
Go thank Brian Nesbitt for his awesome work!