2016-07-31 7 views
2

Я пытаюсь вставить данные в базу данных mysql в yii, но я хочу иметь доступ к каждому из входов в контроллере. , так что я могу разместить их в 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')?> «Потому что форма дает мне неопределенную переменную: model» – arinze

Смежные вопросы