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();?>
谢谢大家
当我想从表单中获取变量时,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();?>
谢谢大家