首页 > 解决方案 > yii2中更新表单中的多个提交表单

问题描述

在我的更新表单中,我有两个提交表单“保存”、“保存并提交”。他们每个人都会更新特定的字段。

提交按钮看起来像 -

<?= Html::submitButton('Save',['name'=>'submit', 'value' => 'tello','class' =>  'btn btn-primary']) ?>
                <?= Html::submitButton('Save & Submit',['name'=>'submit', 'value' => 'hello','class' =>  'btn btn-success']) ?>

到目前为止我得到的最好的控制器动作是 -

if(Yii::$app->request->post('submit')==='tello'){
            var_dump("Save is clicked");
            die();
       }
       elseif(Yii::$app->request->post('submit')==='hello'){
            var_dump("Submit is clicked");
            die();
       }

问题在于,我必须单击按钮两次才能提交。我了解到我必须将按钮名称更改为submit. 我尝试改变它的任何东西,但它没有工作。它忽略了代码并继续下一组代码。

我在创建表单中也有这两个按钮

形式

<?= Html::submitButton('Save',['name'=>'Save', 'value' => 'Save','class' =>  'btn btn-primary']) ?>
                <?= Html::submitButton('Save & Submit',['name'=>'Submit', 'value' => 'Submit','class' =>  'btn btn-success']) ?>

控制器动作

if ($model->load(Yii::$app->request->post())&& isset($_POST['Save'])){
//do my stuff
}
elseif ($model->load(Yii::$app->request->post())&& isset($_POST['Submit'])){
//do my stuff
}

根据 scaiseEdge 创建控制器操作的要求

public function actionCreatenewworkbasic()
    {
       $model = new Workpermit();

       //$model->wp_validfrom = date('Y-m-d H:i:s');
       //$model->wp_validto = date('Y-m-d H:i:s');
       $model->wp_timeissued = date('Y-m-d H:i:s');

       if ($model->load(Yii::$app->request->post()) && isset($_POST['Save'])) {

           //get the instance of the uploaded file
           //$jhaName = $model->wp_no;
           $model->wp_status = 'Saved';
           $timenow = date('-Y-m-d-H-i-s');
           $model->jha = UploadedFile::getInstance($model,'jha');

           if (!empty($model->jha)) {

           $model->jha->saveAs('uploads/jha/'.$model->jha->baseName.$timenow.'.'.$model->jha->extension);      
           //save the path in the db
           $model->wp_jhaattach = 'uploads/jha/'.$model->jha->baseName.$timenow.'.'.$model->jha->extension;

           }                               
           $model->jha = null;
           $model->save(false);


            return $this->redirect(['availablework']); 
       }

       elseif ($model->load(Yii::$app->request->post())&& isset($_POST['Submit'])) 
       {
           //get the instance of the uploaded file
           //$jhaName = $model->wp_no;
           $model->wp_status = 'Submitted';
           $timenow = date('-Y-m-d-H-i-s');
           $model->jha = UploadedFile::getInstance($model,'jha');

           if (!empty($model->jha)) {

           $model->jha->saveAs('uploads/jha/'.$model->jha->baseName.$timenow.'.'.$model->jha->extension);      
           //save the path in the db
           $model->wp_jhaattach = 'uploads/jha/'.$model->jha->baseName.$timenow.'.'.$model->jha->extension;

           }                               
           $model->jha = null;
           $model->save(false);

           return $this->redirect(['availablework']); 
       }
       else{
            return $this->renderAjax('createnewworkbasic', [
               'model' => $model,
            ]);
       } 


    }

行动更新

public function actionUpdatenewwork($id)
    {
       $anotherchecklistitems = Anotherclreq::find()->select('acl_clname')->where(['acl_wpno'=>$id])->column();


       $anotherpermitlistitems = Anotherpermitreq::find()->select('apr_apname')->where(['apr_wpno'=>$id])->column();

       $model = $this->findModel($id);
       //we have a relation between workpermit and anotherchecklist named anotherchecklistrel
       $modelsAnotherchecklist = $model->anotherchecklistrel;
       $modelsAnotherpermitlist = $model->anotherpermitlistrel;

       if(isset($_POST['Workpermit']['anotherchecklist'])){

          $oldIDs = ArrayHelper::map($modelsAnotherchecklist, 'acl_id', 'acl_id');
          $oldIDstring = implode(",", $oldIDs);

          // print_r($oldIDstring);
          // die();

          foreach ($oldIDs as $id) {
            Anotherclreq::findOne($id)->delete();
          }
          //die();

          $anotherChecklist = $_POST['Workpermit']['anotherchecklist'];
          foreach ($anotherChecklist as $value) {

            $anotherclreq = new Anotherclreq();
            $anotherclreq->acl_wpno = $model->wp_no;
            $anotherclreq->acl_clname = $value;
            $anotherclreq->save();

          }

       }

       if(isset($_POST['Workpermit']['anotherpermittype'])){

          $oldAPs = ArrayHelper::map($modelsAnotherpermitlist, 'apr_id', 'apr_id');
          $oldAPstring = implode(",", $oldAPs);
          // print_r($oldIDstring);
          // die();

          foreach ($oldAPs as $id) {
            Anotherpermitreq::findOne($id)->delete();
          }

          $anotherPermit = $_POST['Workpermit']['anotherpermittype'];
          foreach ($anotherPermit as $value) {

          $anotherpermitreq = new Anotherpermitreq();
          $anotherpermitreq->apr_wpno = $model->wp_no;
          $anotherpermitreq->apr_apname = $value;
          $anotherpermitreq->save();

          }

       }

       if(Yii::$app->request->post('submit')==='tello'){
            var_dump("Save is clicked");
            die();
       }
       elseif(Yii::$app->request->post('submit')==='hello'){
            var_dump("Submit is clicked");
            die();
       }

       if ($model->load(Yii::$app->request->post())) {
           //$model->wp_nwopcheckliststatus = 'Submitted';
           $model->save();
           return $this->redirect(['viewall', 'id' => $model->wp_no]);
       }

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

在创建表单中效果很好。但对于更新形式,它没有。请帮忙。

一些观察 - 我已经更改了如下按钮 -

<?= Html::submitButton('Save',['id' => 'savename','name'=>'savename', 'value' => 'savename','class' =>  'btn btn-primary']) ?>
                <?= Html::submitButton('Save & Submit',['id' => 'submitname','name'=>'submitname', 'value' => 'submitname','class' =>  'btn btn-success']) ?>

现在,如果我在 Controller 操作中使用以下代码,则表单将按应有的方式提交-

if (Yii::$app->request->isPost) {

           if ($model->load(Yii::$app->request->post())) {
              $model->wp_nwopcheckliststatus = 'Saved';
              $model->save();          
              return $this->redirect(['viewall', 'id' => $model->wp_no]);
           }
        }

但是一旦我改变$model->load(Yii::$app->request->post())它就$model->load(Yii::$app->request->post('savename'))停止工作。

标签: yii2

解决方案


如果我是你,我会创建一个隐藏的文本字段。

而不是直接提交表单,我会附加一个事件监听器。

通过javascript表示,在按钮上添加点击事件并将隐藏文本字段的值更改为任何值 - 0 - 1 或任何值。然后提交表格。

例如:

<input type="hidden" name="pressed" id="pressed" />
<script>

$('#save').click(function(){
  $('pressed').val("save");
});   

$('#save-and-submit').click(function(){
  $('pressed').val("submit");
}); 

</script>

然后签到$_POST['pressed'];


推荐阅读