t9221823420
@t9221823420
PHP developer

View/Create/Update — это ли не ViewEdit? (через kartik DetailView) Как бы Вы это реализовали в одном Action (+Events)?

Используя виджет 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- в чем минус данного подхода? (я для себя минусов событийной модели программирования так и не нашел - вынесу в отдельный вопрос). Ваши мысли/догадки/предсказания по этому поводу?
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
1) actionGovnoKod
3) А зачем Вам yii и ООП? Просто 1 файл php и там все. Это же классно. Предлагаю еще дополнить комментариями на русском языке и вместо модели прямо из этого супер файла лазить в базу через mysqlli.
Ответ написан
@karminski
Senior React.JS Developer
Слышали о таком - Single Responsibility? Один метод класса должен отвечать за одно действие! Это один из принципов SOLID в ООП. Сам Yii этому следует и рекомендует следовать своим пользователям. А вот то, что вы пытаетесь сделать, называется - "говнокод".

https://ru.wikipedia.org/wiki/SOLID_(объектно-орие...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы