内部控制器中的发布未在Yii2中加载到模型中

问题描述 投票:0回答:2

[当我想从表单获取变量时,不会加载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'));

}

结果是'什么都不对。'>

当我想从表单获取变量时,不会加载post操作。这是我的观点:

...
] >>

这是因为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">

当然,我要在其中输入用户名,您必须输入真实的模型名称。

除了使用锚点链接而不是提交按钮之外,您没有使用模型来创建活动输入,因此字段名称没有模型名称或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 ($model->load(Yii::$app->request->post(),'')){
    exit(var_dump('everything is ok'));
}else {
    exit(var_dump('nothing is right'));
}
yii yii2 yii2-advanced-app yii-extensions yii-form
2个回答
0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.