afterFind, поведение и другие способы, завязанные на события, плохи тем, что преобразование будет выполняться всегда. И это рано или поздно начнёт создавать проблемы.
Тебе же преобразование нужно только в двух случаях
1. модель передаётся в форму редактирования.
2. модель заполняется данными из формы.
Решается просто. В модель добавляешь свойство
прописываешь его в "rules"
Код: Выделить всё
['birthdateWithDots', 'safe'], // оставляем просто "safe" либо вписываем валидатор даты
далее в экшенах преобразовываем (пример кода для "actionCreate")
Код: Выделить всё
if ($model->load(Yii::$app->request->post())) {
$model->birthdate = $this->dateDotsToDashes($model->birthdateWithDots);
if ($model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
}
$model->birthdateWithDots = $this->dateDashesToDots($model->birthdate);
return $this->render('create', [
'model' => $model,
]);
Ну и в форме, соответственно, в поле редактирования отдаём "birthdateWithDots" вместо "birthdate".
Вот так будет самое наглядное.
Если хочется сохранить контроллер чистым от этой логики, то можно создать модель специально для формы редактирования, в которую вынести все эти преобразования. Тогда экшен в контроллере вернётся практически к изначальному виду.