Post 内部控制器未加载到 Yii2 中的模型中

Post inside controller not loading into model in Yii2

当我想从表单中获取变量时,post 操作没有加载。

这是我的观点:

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

}

结果是'nothing is right'。

除了使用锚 link 而不是提交按钮之外,您没有使用模型来创建活动输入,因此字段名称没有模型名称或 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'));
    }

}

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

所以你的postYii::$app->request->post()returns:

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

你的 $model->load 寻找

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

要使您的 post 数据看起来也像您可以采用正确的方式,即删除您的输入并在表单中使用此方法:

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

或者方法不对,修改你的输入和内部用户名使用:

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

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

终于找到解决方法

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

谢谢大家