<?php
namespace app\components\behaviors;
use yii\base\Behavior;
use yii\db\ActiveRecord;
use yii\base\InvalidConfigException;
class DateBehavior extends Behavior
{
public $owner;
public $date="date";
public function init()
{
parent::init();
if (!isset($this->date)) {
throw new InvalidConfigException('The "date" must be specified.');
}
}
public function events()
{
return [
ActiveRecord::EVENT_BEFORE_INSERT => 'processDate',
ActiveRecord::EVENT_BEFORE_UPDATE => 'processDate',
ActiveRecord::EVENT_AFTER_FIND => 'afterFind',
];
}
public function processDate($event)
{
$date = \DateTime::createFromFormat('d/m/Y', $this->owner->{$this->date});
$this->owner->{$this->date} = $date->format('Y-m-d') ;
}
public function afterFind($event)
{
$date = \DateTime::createFromFormat('Y-m-d', $this->owner->{$this-$this->date});
$this->owner->{$this->date} = $date->format('d/m/Y');
}
}
La flessibilità di questo approccio è che può richiamarlo dai tuoi model che fanno uso di un campo data da convertire e riconvertire.
Dopo la ricerca (EVENT_AFTER_FIND), converte i formato d/m/Y, quando inserisci o modifichi (EVENT_BEFORE_INSERT || EVENT_BEFORE_UPDATE) fa si che venga prima convertito in formato Mysql e poi sparato nel DB.