Extender Carbon con macros
Recientemente tuve que crear un sistema de importación con un proveedor externo, y tenían un formato de fechas un tanto extraño. Para evitar repetir en mi código $date→format('Y') . str($date→format('z') + 1)→padLeft(3, '0')
constantemente, decidí extender Carbon con una macro.
Cómo funcionan las macros
Las macros son muy útiles y están presentes en multitud de clases de Laravel. Nos permiten extender la funcionalidad de ciertas clases añadiéndoles métodos que luego podremos usar en nuestro código.
A grosso modo, su funcionamiento se basa en un array $macros = []
y un método parecido al siguiente:
public static function macro(string $name, $macro)
{
self::$macros[$name] = $macro;
}
Cómo usar macros en Carbon
Para usarlas en Carbon podemos llamar al método macro
desde nuestro service provider:
public function boot()
{
Carbon::macro('toProviderDate', static function () {
return self::this()->format('Y') . str(self::this()->format('z') + 1)->padLeft(3, '0');
});
}
Esta sintaxis de static function
y self::this()
es algo más propio de Carbon que de las macros de Laravel.
Ahora ya podemos usar toProviderDate()
en nuestras fechas y se ejecutará ese método de formateo:
$date = now()->toProviderDate();