-1

当我想从表单中获取变量时,post action 不会加载。

这是我的看法:

<?php
        $form = ActiveForm::begin();
        ?>
            <div class="form-group">
                <input type="text" name="username" placeholder="FullName">

                <?= Html::a(Yii::t('app', 'Start'), ['start', 'link' => $model->link], ['type' => 'button','class' => 'btn btn-primary btn-round']) ?>
            </div>

            <?php ActiveForm::end(); ?>

这是我的控制器:

if ($model->load(Yii::$app->request->post())){
    exit(var_dump('everything is ok'));
}else {
    exit(var_dump('nothing is right'));

}

结果是'没有什么是对的'。

4

3 回答 3

1

除了使用锚链接而不是提交按钮之外,您没有使用模型来创建活动输入,因此字段名称没有模型名称或 Yii 接受的标准数组格式,您应该将空字符串作为第二个参数传递给加载方法就像formName下面

$model->load(Yii::$app->request->post(),'');

所以你的完整表格应该看起来像

<?php
    $form = ActiveForm::begin(
        [
            'action' => 'start',
        ]
    );
?>
<div class="form-group">
    <input type="text" name="username" placeholder="FullName">
    <?php echo Html::submitButton(Yii::t('app', 'Start'), ['class' => 'btn btn-primary btn-round']) ?>
</div>

<?php ActiveForm::end();?>

编辑

并且您的控制器代码应如下所示,请注意首先检查它需要在那里,以便仅在您提交时运行代码而不是在页面加载时

if (Yii::$app->request->isPost) { //this should be here before the rest of the code

    if ($model->load(Yii::$app->request->post(), '')) {
        exit(var_dump('everything is ok'));
    } else {
        exit(var_dump('nothing is right'));
    }

}
于 2019-12-16T11:49:49.190 回答
0

最后我找到了解决方案

<?php
$form = ActiveForm::begin(
    [
        'action' => 'start',
    ]
);
?>
<div class="form-group">
    <input type="text" name="username" placeholder="FullName">
    <?= Html::a('submit', Url::to(['start', 'link' => $model->link]), ['data-method' => 'POST']) ?>
</div>

<?php ActiveForm::end();?>

感谢你所做的一切

于 2019-12-17T08:21:14.540 回答
0

这是因为load()方法在模型名称属性中查找发布数据,并且您自己编写输入,而不是使用 Yii 方法来处理表单。

所以你的帖子Yii::$app->request->post()返回:

array(
 'username' => 'value of username',
)

而你的$model->load寻找

 array(
     'modelName' => array(
         'username' => 'value of username',
       )
  )

要使您的帖子数据看起来也像这样,您可以以正确的方式进行操作,即删除您的输入并在表单中使用此方法:

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

或者错误的方式,修改您的输入和内部用户名使用:

<input type="text" name="modelName[username]" placeholder="FullName">

当然,我放用户名的地方你必须放你的真实型号。

于 2019-12-16T11:52:46.370 回答