yii2中以更新形式的多个submitform

时间:2019-01-02 08:13:05

标签: 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')),它就会停止工作。

1 个答案:

答案 0 :(得分:0)

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

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

按javascript的意思,在按钮上添加click事件,并将隐藏文本字段的值更改为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'];