check a specific submit button value in controller

2019-02-26 05:47发布

问题:

how to check a submit button value in controller (Yii2). I am working with multiple submit button.

I tried simple php code. but it is not working.

if(isset($_POST['next']) && $_POST['next']=='gotocartfive') 

code in view is :

<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'status')->checkbox(); ?>

</div>

<div class="form-group">
    <?php echo Html::submitButton('NEXT',array('value'=>'gotocartfive','name' => 'next','id'=>'next_summary','class'=>'btn btn-primary pull-right')); ?>
    <?php echo Html::submitButton('PREVIOUS',array('value'=>'previous_four','name' => 'cartfour','class'=>'btn btn-primary pull-left')); ?>
</div>  
<?php ActiveForm::end(); ?>

回答1:

<?= Html::submitButton('Submit 1', ['name' => 'submit', 'value' => 'submit_1']) ?>
<?= Html::submitButton('Submit 2', ['name' => 'submit', 'value' => 'submit_2']) ?>

PHP

If (\Yii::$app->request->isPost) {
   switch (\Yii::$app->request->post('submit')) {
      case 'submit_1':

      case 'submit_2':

   }
}

When you submit form by pressing enter (without click any submit button), submit_1 will be default value.



回答2:

You can try following code.

Code in view file.

<?= Html::submitButton(Yii::t('app', '<i class="fa fa-times"></i>&nbsp;Remove'), ['class' => 'btn red', 'name' => 'submit', 'value' => '0']) ?>
<?= Html::submitButton(Yii::t('app', '<i class="fa fa-check"></i>&nbsp;Save'), ['class' => 'btn blue', 'name' => 'submit', 'value' => '1']) ?>

Code in controller action

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

  if (Yii::$app->request->post('submit') == 0) {
     //Code for value 0
  }

  if (Yii::$app->request->post('submit') == 1) {
    //Code for value 1
  }

}

Please let me know if you've any questions.



回答3:

Try This :

View File

<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'status')->checkbox(); ?>
<div class="form-group">
  <?= Html::submitButton('NEXT',[ 'name'=>'submit', 'value' => 'next', 'class' => 'btn btn-primary pull-right']) ?>
  <?= Html::submitButton('PREVIOUS',[ 'name'=>'submit', 'value' => 'previous', 'class' => 'btn btn-primary pull-right') ?>
</div>  
<?php ActiveForm::end(); ?>

Controller File

public function actionYourControllerName()
{
    if(isset($_POST['submit') && $_POST['submit']=='next') 
    {
      // your code
    } 
    else if(isset($_POST['submit']) && $_POST['submit']=='previous') 
    {
       // your code
    }
}


回答4:

Also you can add this little js snippet to your project and bind it to beforeSubmit event in yii.activeForm.js like this:

(function ($) { 
    var formId = !!yiiconfig.viewPolicyParams && yiiconfig.viewPolicyParams.formId && yiiconfig.viewPolicyParams.formId, 
        $form = formId && $("#" + formId);

    /**
     * Updates hidden field that represents clicked submit button.
     * @param event event object triggered
     */
    function updateHiddenButton (event) {
        var $buttons = $form.find(':submit');

        $buttons.length && $buttons.each(function (i,b) {
            var $hiddenButton = $('input[type="hidden"][name="' + $(b).attr('name') + '"]', $form);
            $hiddenButton.length && $hiddenButton.remove();
        });

    };

    $form && $form.bind('beforeSubmit.' + formId, updateHiddenButton);

} (jQuery));

This code removes all hidden inputs which are being created by yii.activeForm before submitting. Then after this inputs will be recreated by yii.activeForm.

hope this helps