首页 > 解决方案 > yii2页面的if else操作

问题描述

我有 3 个类似的页面,页面 A、页面 B 和页面 C。所有这些页面都是为了创建新数据。

如果其他使用页面怎么办?

想法是这样的:

Page A ----> actionCreate() -----> render to 'create'
Page B ----> actionCreate() -----> render to 'create-obituary'
Page C ----> actionCreate() -----> render to 'create-anniversary'

控制器.php

public function actionCreate()
{
    $session = Yii::$app->session;
    $model = new Memoriam(['scenario'=>'create']);

    if ($model->load(Yii::$app->request->post())) {
        //$model->owner_id = $session['UserID'];
        $model->picture1 = UploadedFile::getInstance($model, 'picture1');
        //$model->imageFiles = UploadedFile::getInstances($model, 'imageFiles');
            if ($model->validate()) {
                if($model->picture1 != null)
                {
                    $dir = "img/".$session['UserID']."/memoriam/";

                    if(!file_exists($dir)) 
                    {
                        $old = umask(0);
                        mkdir($dir, 0777, true);
                        umask($old);
                    }
                    $path = md5(date("YmdHis")) . '.' . $model->picture1->extension;
                    $model->picture1->saveAs($dir.$path);
                    $model->picture1 = $path;
                    $model->page = 1;
                }



            if($model->save(false)){
                return $this->redirect(['site/profile', 'id' => $model->ID]);
            }
        }
        else {
            return $this->render('create', ['model' => $model]);
        }
    }

    return $this->render('create', [
        'model' => $model,
    ]);
}

public function actionCreateDeparted()
{
    $session = Yii::$app->session;
    $model = new Memoriam(['scenario'=>'create']);

    if ($model->load(Yii::$app->request->post())) {
        //$model->owner_id = $session['UserID'];
        $model->picture1 = UploadedFile::getInstance($model, 'picture1');
        //$model->imageFiles = UploadedFile::getInstances($model, 'imageFiles');
            if ($model->validate()) {
                if($model->picture1 != null)
                {
                    $dir = "img/".$session['UserID']."/memoriam/";

                    if(!file_exists($dir)) 
                    {
                        $old = umask(0);
                        mkdir($dir, 0777, true);
                        umask($old);
                    }
                    $path = md5(date("YmdHis")) . '.' . $model->picture1->extension;
                    $model->picture1->saveAs($dir.$path);
                    $model->picture1 = $path;
                    $model->page = 8;
                }



            if($model->save(false)){
                return $this->redirect(['site/profile', 'id' => $model->ID]);
            }
        }
        else {
            return $this->render('create-departed', ['model' => $model]);
        }
    }

    return $this->render('create-departed', [
        'model' => $model,
    ]);
}

public function actionCreateAnniversary()
{
    $session = Yii::$app->session;
    $model = new Memoriam(['scenario'=>'create']);
    $modelAnn = new Anniversary();

    if ($model->load(Yii::$app->request->post()) && $modelAnn->load(Yii::$app->request->post())) {
        //$model->owner_id = $session['UserID'];
        $model->picture1 = UploadedFile::getInstance($model, 'picture1');
        //$model->imageFiles = UploadedFile::getInstances($model, 'imageFiles');
            if ($model->validate()) {
                if($model->picture1 != null)
                {
                    $dir = "img/".$session['UserID']."/memoriam/";

                    if(!file_exists($dir)) 
                    {
                        $old = umask(0);
                        mkdir($dir, 0777, true);
                        umask($old);
                    }
                    $path = md5(date("YmdHis")) . '.' . $model->picture1->extension;
                    $model->picture1->saveAs($dir.$path);
                    $model->picture1 = $path;

                }
            $model->page = 4;
            $model->save();
            $modelAnn->decease_id = $model->ID;
            $modelAnn->save();


            if($model->save(false)){
                return $this->redirect(['site/profile', 'id' => $model->ID]);
            }
        }
        else {
            return $this->render('create-departed', [
                'model' => $model,
                'anniversary' => $modelAnn]);

        }
    }

    return $this->render('create-anniversary', [
        'model' => $model,
        'anniversary' =>$modelAnn, 
    ]);
}

问题是我只想在所有这 3 个页面上使用一个控制器(即 actionCreate())。这意味着我想为所有这 3 个页面(页面 A、B 和 C)做 if else。

标签: yii2

解决方案


我建议将一些参数传递给操作:

public function actionCreate($type = 'create')
{
    $typeToPageMapping = [
        'create' => 1,
        'departed' => 8,
        'anniversary' => 4,
    ]

    $model = new Memoriam(['scenario'=>'create']);
    if ($type == 'anniversary') {
        $modelAnn = new Anniversary();
    }

    if ($model->load(Yii::$app->request->post()) && ($type != 'anniversary' || $modelAnn->load(Yii::$app->request->post()))) {
        $model->picture1 = UploadedFile::getInstance($model, 'picture1');
        if ($model->validate()) {
            $model->picture1 = $this->savePicture($model);
            $model->page = $typeToPageMapping[$type];
            $model->save();
            if ($type == 'anniversary') {
                $modelAnn->decease_id = $model->ID;
                $modelAnn->save();
            }    
            if($model->save(false)){
                return $this->redirect(['site/profile', 'id' => $model->ID]);
            }
        }
    }

    return $this->render('create', [
        'model' => $model,
        'type' => $type,
        'anniversary' => $modelAnn ?? null,
    ]);
}

protected function savePicture($model)
{
    $session = Yii::$app->session;
    if($model->picture1 == null) {
        return null;
    }

    $dir = "img/".$session['UserID']."/memoriam/";

    if(!file_exists($dir)) 
    {
        $old = umask(0);
        mkdir($dir, 0777, true);
        umask($old);
    }
    $path = md5(date("YmdHis")) . '.' . $model->picture1->extension;
    $model->picture1->saveAs($dir.$path);
    return $path;
}

推荐阅读