Используя виджет
Kartik DetailView CRU[D] операция сводится к одному Action. Т.е. (для тех кто не в курсе) Create/View/Update можно объединить.
public function actionViewEdit ()
{
/**
* @var ActiveRecord $primaryModel
* @var array $primaryKey
*/
$primaryModel = static::primaryModel(); // like app\models\Model
$primaryKey = array_intersect_key($_GET, array_flip( ($primaryModel)::primaryKey( true ) )); // because of composite key
// Event AFTER_LOAD_PRIMARY_KEY
if( empty( $primaryKey ) ) { // create
$model = new $primaryModel();
// Event AFTER_NEW_MODEL
}
elseif( ( $model = ($primaryModel)::findOne( $primaryKey ) ) !== null) { // update
// Event AFTER_FIND_MODEL
}
else{
throw new NotFoundHttpException( Yii::t('app', 'The requested page does not exist.' ));
}
/**
* Leave it here because we may have to load some initial data to new model (for example parent_id)
*/
if( $model->load( Yii::$app->request->post() ) ) {
// Event AFTER_LOAD_MODEL
if( $model->validate() ){
// Event AFTER_VALIDATE_MODEL
if( !$model->isNewRecord && $model->save(false) ){
// Event AFTER_SAVE_RECORD
Yii::$app->session->setFlash( 'kv-detail-success', Yii::t('app', 'Record saved successfully') );
}
}
}
// Event BEFORE_RENDER
return $this->render( 'view-edit', [
'model' => $model,
] );
}
1) Как правильно назвать этот Action? Create/Update - это по сути Edit. Как сюда привязать View? ViewEdit "звучит не очень" - еще варианты?
2) Отвечая на вопрос "а если вдруг придет война" - ничего Вам не мешает прикрутить дополнительный Action. На случай нашествия фашистов и для "последующих" адептов(потомков) Create/View/Update хочу сохранить "как задумывалось" - чтобы было! поэтому обозвать просто View (ну типаж MV(iew)C)- не вариант.
3) Хочу прикрутить Events (Before/After (find/loadData/validation/save/render) в этот самый ViewEdit- в чем минус данного подхода? (я для себя минусов событийной модели программирования так и не нашел - вынесу в отдельный вопрос). Ваши мысли/догадки/предсказания по этому поводу?