2016-07-31 90 views
2

我想在yii中插入数据到MySQL数据库,但我想能够访问控制器中的每个输入。 所以我可以把他们放在一个foreach,因为他们都有相同的名字,但问题是任何时候 我试图访问输入名称我得到这个错误“未定义的索引:主题[主题]”...像输入在视图yii2插入数据库

这不存在是我的控制器

public function actionCompose() 
    { 
    $topic= new Topic(); 
    $topic->topic_id = Yii::$app->request->post('Topic','[topic]'); 

    foreach ($_POST["Topic[topic]"] as $key => $top) { 
     $top=> $topic; 
    } 
     if ($topic->load(Yii::$app->request->post())) { 
      $topic->load($topic); 
     $topic->save(); 
     return $this->refresh(); 
      } 
     return $this->render('compose'); 
     } 

这是我的看法

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

当我使用它像这样它下面只是插入了最后的数据。我明白为什么,但我需要插入所有3个输入。任何其他方式来做到这一点。

public function actionCompose() 
    { 
    $topic= new Topic(); 

     if ($topic->load(Yii::$app->request->post())) { 
      $topic->load($_POST); 
     $topic->save(); 
     return $this->refresh(); 
      } 
     return $this->render('compose'); 
    } 

回答

0

与同类型的多个型号工作覆盖的官方文件中第Collecting tabular input

这里有一些重要的部分。

控制器代码:

<?php 

namespace app\controllers; 

use Yii; 
use yii\base\Model; 
use yii\web\Controller; 
use app\models\Setting; 

class SettingsController extends Controller 
{ 
    // ... 

    public function actionUpdate() 
    { 
     $settings = Setting::find()->indexBy('id')->all(); 

     if (Model::loadMultiple($settings, Yii::$app->request->post()) && Model::validateMultiple($settings)) { 
      foreach ($settings as $setting) { 
       $setting->save(false); 
      } 
      return $this->redirect('index'); 
     } 

     return $this->render('update', ['settings' => $settings]); 
    } 
} 

查看:

<?php 
use yii\helpers\Html; 
use yii\widgets\ActiveForm; 

$form = ActiveForm::begin(); 

foreach ($settings as $index => $setting) { 
    echo $form->field($setting, "[$index]value")->label($setting->name); 
} 

ActiveForm::end(); 

有了框架,最好使用ActiveField作为显示表单输入的抽象。

根据您的模型进行自定义,就是这样。

+0

我不能使用像这样的“”字段($ model,'username')?>“,因为表单给了我Undefined”variable:model“ – arinze