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

rkttyhzu  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(162)

当我想从表单中获取变量时,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'));

}

结果是“没有什么是正确的”。

1mrurvl1

1mrurvl11#

除了使用锚链接而不是提交按钮,您没有使用model来创建活动输入,因此字段名没有model名称或Yii接受的标准数组格式,您应该将空字符串作为第二个参数传递给load方法,如下所示: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'));
    }

}
c6ubokkw

c6ubokkw2#

这是因为load()方法在model name属性中查找post数据,并且您自己编写输入,而不是使用Yii方法编写表单。
所以你的帖子Yii::$app->request->post()返回:

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

而你的$model->load寻找

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

要使您的帖子数据看起来也像这样,您可以用正确的方法来做,也就是说,删除您的Input并在表单中使用以下方法:

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

或者方式不对,修改您输入的和里面的用户名用途:

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

当然,我把用户名,你必须把你的真实的模型的名称。

ohfgkhjo

ohfgkhjo3#

最后我找到了解决办法

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

谢谢你

相关问题