【问题标题】:check a specific submit button value in controller (Yii2)检查控制器中的特定提交按钮值(Yii2)
【发布时间】:2016-07-21 06:39:18
【问题描述】:

如何在控制器 (Yii2) 中检查提交按钮的值。我正在使用多个提交按钮。

我尝试了简单的 php 代码。但它不工作。

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

视图中的代码是:

<?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(); ?>

【问题讨论】:

  • 您可以发布您的表单代码吗?
  • 显示您的查看代码..
  • = $form->field($model, 'status')->checkbox(); ?>
    'gotocartfive','name' => 'next',' id'=>'next_summary','class'=>'btn btn-primary pull-right')); ?> 'previous_four','name' => 'cartfour','class'=>'btn btn-primary pull-left') ); ?>

标签: yii2 yii2-advanced-app


【解决方案1】:
<?= Html::submitButton('Submit 1', ['name' => 'action', 'value' => 'submit_1']) ?>
<?= Html::submitButton('Submit 2', ['name' => 'action', 'value' => 'submit_2']) ?>

PHP

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

      case 'submit_2':

   }
}

当你按回车提交表单时(不点击任何提交按钮),submit_1 将是默认值。

【讨论】:

  • 谢谢。它似乎工作。但是,我必须单击该按钮两次。第一次单击没有任何作用。还有什么事情要做吗?
  • 您的问题与github.com/yiisoft/yii2/issues/10555 相同。当您单击提交按钮时,如果该按钮具有属性名称,则 yii.activeForm.js 添加隐藏输入时的名称与按钮名称相同。解决方案见github.com/yiisoft/yii2/pull/10625/files
  • 不要命名按钮提交,否则你必须点击按钮两次才能提交表单。
  • 注意:这仅适用于普通表单提交,不适用于使用 Pjax 进行表单提交
  • 我无法获得名称,您可以看看我的question 相关吗?
【解决方案2】:

你可以试试下面的代码。

视图文件中的代码。

<?= 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']) ?>

控制器动作中的代码

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
  }

}

如果您有任何问题,请告诉我。

【讨论】:

  • 按照上面的cmets,不要将其命名为“提交”。否则您将需要单击两次,因为它使用 jquery 添加隐藏变量
  • @LionelYeo 我已经分别命名了它们,但它仍然符合0 条件
  • @Faisal 试试name=&gt;"action" val=&gt;"0" and name="action" , val=&gt;"1"
  • @LionelYeo 又是同样的问题
  • @LionelYeo 我无法获得名称,您能看看我的question 相关吗?
【解决方案3】:

试试这个:

查看文件

<?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(); ?>

控制器文件

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

【讨论】:

  • 除了使用isset($_POST['submit'))之外还有其他方法吗?
【解决方案4】:

你也可以将这个小 js sn-p 添加到你的项目中,并将其绑定到 yii.activeForm.js 中的beforeSubmit 事件,如下所示:

(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));

此代码在提交之前删除所有由 yii.activeForm 创建的隐藏输入。 然后在此输入将由 yii.activeForm 重新创建。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2018-05-10
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多