【问题标题】:How to get Submit Button Values in Controller/Action Yii2如何在控制器/动作 Yii2 中获取提交按钮值
【发布时间】:2016-09-06 17:19:10
【问题描述】:

我是 Yii2 框架的新手。我想在我的控制器/操作中获取提交按钮名称/值。

以下是我的代码:

表格:

<?php $form = ActiveForm::begin(); ?>

<?= $form->field($model, 'admin_document_key_id')->dropDownList(ArrayHelper::map(AdminDocumentKey::find()->all(), 'id', 'key_name'), ['prompt' => 'Select']) ?>

<?= $form->field($model, 'key_value')->textInput(['maxlength' => 255]) ?>    

<div class="form-group">
    <?php if (Yii::$app->controller->action->id == "create"): ?>
        <?= Html::submitButton('Create & Add New', ['class' => 'btn btn-primary']) ?>
    <?php endif; ?>

            <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary', 'value'=>'Create', 'name'=>'submit']) ?>
    <?= Html::a('Cancel', ['/admindocumentvalue'], ['class' => 'btn btn-warning']) ?>
    <?= Html::resetButton('Reset', ['class' => 'btn btn-info']) ?>
</div>

控制器/动作:

public function actionCreate()
 {
    $model = new AdminDocumentValue();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        print_r(Yii::$app->request->post());
        exit;
        return $this->redirect(['index', 'id' => $model->id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
 }

它显示以下输出:

Array ( [_csrf] => V0FKc09GclQDbHI1BRVEIR8xOwcjLEFiBSsyGBcZGj4dMWc6JzItbA== [AdminDocumentValue] => Array ( [admin_document_key_id] => 1 [key_value] => Claims ) ) 

但不显示提交按钮名称和值。

我也尝试了$_POST$_REQUEST,但仍然无法正常工作。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 您想要按钮(HTML 元素)名称和值还是表单值?
  • 表单值,包括提交按钮值
  • 我只想根据点击的按钮重定向用户
  • 提交按钮只有提交表单才需要,怎么会有值?

标签: php yii yii2


【解决方案1】:

通过更改默认 Yii2 按钮自己解决了这个问题:

<?= Html::submitButton('Create & Add New', ['class' => 'btn btn-primary', 'value'=>'create_add', 'name'=>'submit']) ?>
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary', 'value'=>'Create', 'name'=>'submit']) ?>

然后在控制器中

if (Yii::$app->request->post('submit')==='create_add') {
    // create add
} else {
    // submit
}

【讨论】:

  • 你是如何用这个按钮值解决你的控制器逻辑的?
  • 如果你通过ajax提交表单,你需要遵循与yii.activeForm.js类似的逻辑
  • 补充一点,每个提交按钮的name 需要不同(例如submit-create-addsubmit-create),因为这会导致某些浏览器中的按钮出现一些奇怪的行为。使用同名按钮时,我必须单击两次按钮才能提交表单。
【解决方案2】:

试试这个:

if ($model->load(Yii::$app->request->post())) {
    $data=Yii::$app->request->post('Postdata');
    print_r(json_encode($data));
    print_r($data["post_id"]);
    $model->post_id =$data["post_id"];//$_POST["post_id"];
    $model->title =$data["title"];// $_POST["title"];
    $model->description =$data["description"];//$_POST["description"];
    $model->user_id =$data["user_id"];//$_POST["user_id"];
}

【讨论】:

    【解决方案3】:

    Mark 的答案适用于非 ajax 表单。如果您想移动到 ajax 表单,您需要在按钮中添加值,如下所示:

    <?= Html::submitButton('Create & Add New', ['class' => 'btn btn-primary', 'value'=>'Create & Add New', 'name'=>'submit']) ?>
    <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary', 'value'=>'Create', 'name'=>'submit']) ?>
    

    然后跟yii.activeForm.js中类似的逻辑:

    // send data to actionSave by ajax request.
    $(document).on("beforeSubmit", "#my-form-id", function () {            
        var data = $(this).data('yiiActiveForm'),
        $button = data.submitObject,
        extData = '&' + data.settings.ajaxParam + '=' + $(this).attr('id');
        if ($button && $button.length && $button.attr('name')) {
          extData += '&' + $button.attr('name') + '=' + $button.attr('value');
        }
        $.post($(this).attr('action'), $(this).serialize() + extData
        ).done(function(result){
          // process      
        });
        return false; 
    });
    

    【讨论】:

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