yii2 - 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。
解决方案
我建议将一些参数传递给操作:
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;
}
推荐阅读
- html - 如何在按钮内设置跨度全宽?css
- java - Swagger:将 Java LocalDateTime 转换为 Joda LocalDateTime
- android - Android TV 7.1.1 问题与导航焦点
- .net - Azure 函数未并行运行
- ruby - 我无法使用 Ruby 和 Rspec 将输出转换为 Json
- docker - Docker Host和容器可以共享同一个子网吗
- python - 正则表达式模式
- mysql - 我应该如何在我的数据库设计中分离这些数据
- c - 在C中将奇数索引元素从一个数组复制到另一个数组
- javascript - 制作小书签以单击 Word Hippo 上的所有“更多 >”链接,无需在两次点击之间等待