在 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'));
}

结果是"一切都不对"。

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

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

当然,在我输入用户名的地方,您必须输入您的真实型号名称。

最后我找到了解决方案

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

谢谢大家

最新更新