我正在尝试在yii2中的数据库中插入数据,但我喜欢3个具有相同名称的输入。 当我尝试插入数据库时,它只插入最后一个输入的值。
这是我的控制器
public function actionCompose_vote()
{
$topic= new Topic();
if ($topic->load(Yii::$app->request->post())) {
$topic->load($_POST);
$topic->save();
return $this->refresh();
}
return $this->render('compose_vote');
}
这是观点
use yii\widgets\ListView;
use yii\data\ArrayDataProvider;
use app\models\MyProfile;
use app\models\LikeDiscussion;
use yii\widgets\ActiveForm;
use common\models\Topic;
use common\models\Comment;
use common\models\Users;
use common\models\Candidate;
use yii\widgets\Pjax;
use yii\helpers\Html;
use frontend\assets\AppAsset;
$this->title = 'My Yii Application';
?>
<?php $form = ActiveForm::begin(); ?>
<input type="name" class="form-control" required="true" name="Topic[topic]" id="topic" placeholder="topic">
<input type="name" class="form-control" required="true" name="Topic[topic]" id="topic" placeholder="topic">
<input type="name" class="form-control" required="true" name="Topic[topic]" id="topic" placeholder="topic">
<?php ActiveForm::end(); ?>
我还尝试将值放在foreach循环中
foreach ($_POST['Topic[topic]'] as $top) {
$top => $topic;
}
但是它给出了变量“Topic [topic]”不存在的错误。
还有其他办法吗?
答案 0 :(得分:1)
请阅读docs。当我们可以使用ActiveForm时,用纯HTML添加输入有什么意义呢?另外,您缺少以这种方式进行的所有验证。
如果您有一个可以同时保存多个值的表单,我强烈建议您为此表单创建另一个模型。像这样:
class ModelForm extends \yii\base\Model
{
public $attribute;
/**
* @return array the validation rules.
*/
public function rules()
{
return [
[['attribute'], 'safe'],
];
}
/**
* @return array customized attribute labels
*/
public function attributeLabels()
{
return [
'attribute' => 'Friendly Name',
];
}
}
现在您可以在视图中使用它了:
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($modelForm, 'attribute[]') ?>
<?= $form->field($modelForm, 'attribute[]') ?>
<?= $form->field($modelForm, 'attribute[]') ?>
<?= $form->field($modelForm, 'attribute[]') ?>
<?php $form = ActiveForm::end(); ?>
添加[]
将确保$_POST
值为数组。然后,您可以获取此数组并在控制器中创建一个循环,以尝试保存模型的新实例:
$modelForm = new ModelForm();
if ($modelForm->load(Yii::$app->request->post())) {
foreach ($modelForm->attribute as $attribute) {
$model = new Model(['attribute' => $attribute]); // load each information in your desired model->attribute
if (!$model->save()) {
var_dump($model->getErrors()); // verify each Model could be saved and, if not, handle the error.
return;
}
}
return $this->refresh();
}
return $this->render('compose_vote', ['modelForm' => $modelForm]);