簡體   English   中英

將數據保存到db yii2

[英]Saving data to db yii2

我正在嘗試將數據從我的表單保存到數據庫。 但是當我點擊“提交”按鈕時沒有發生任何事情(頁面刷新但我的數據庫表是空白的)我做錯了什么? 我正在創建擴展ActiveRecord的模型:

class EntryForm extends \yii\db\ActiveRecord
{
    public $id;
    public $name;
    public $email;
    public $age;
    public $height;
    public $weight;
    public $city;
    public $checkboxList;
    public $checkboxList1;
    public $imageFiles;
    public function rules()
    {
        return [
            [['name', 'email','age','height','weight','city','checkboxList','checkboxList1'], 'required'],
            [['imageFiles'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg','maxFiles' => 5],
            ['email', 'email'],
        ];
    }
    public static function tableName()
    {
    return 'form';
    }
    public function attributeLabels()
   {
       return [
           'id' => 'ID',
           'name' => 'name',
           'email' => 'e-mail',
           'age' => 'age',
           'height' => 'height',
           'weight' => 'weight',
           'city' => 'city',
           'checkboxList' => 'technies',
           'checkboxList1' => 'english_level',
           'imageFiles[0]' => 'photo_1',
           'imageFiles[1]' => 'photo_2',
           'imageFiles[2]' => 'photo_3',
           'imageFiles[3]' => 'photo_4',
           'imageFiles[4]' => 'photo_5'
       ];
   }
   public function insertFormData()
   {
       $entryForm = new EntryForm();
       $entryForm->name = $this->name;
       $entryForm->email = $this->email;
       $entryForm->age = $this->age;
       $entryForm->height = $this->height;
       $entryForm->weight = $this->weight;
       $entryForm->city = $this->city;
       $entryForm->checkboxList = $this->checkboxList;
       $entryForm->checkboxList1 = $this->checkboxList1;
       $entryForm->imageFiles = $this->imageFiles;
       return $form->save();
   }
   public function contact($email)
  {
      if ($this->validate()) {
          Yii::$app->mailer->compose()
              ->setTo($email)
              ->setFrom('prozrostl@gmail.com')
              ->setSubject('Email from test app')
              ->setTextBody($this->name + $this->age + $this->height + $this->width + $this->city + $this->checkboxList + $this->checkboxList1 + $this->imageFiles)
              ->send();

          return true;
      } else {
          return false;
      }
  }
    }

然后我更新我的視圖文件以顯示表單,查看它只是簡單的幾個字段和上傳文件按鈕(但所有信息都不保存)

<?php $form = ActiveForm::begin([
        'id' => 'my-form',
        'options' => ['enctype' => 'multipart/form-data']
    ]); ?>
    <div class="row">
        <div class="col-lg-6">
            <?= $form->field($entryForm, 'name')->textInput(['class'=>'name_class'])->input('name',['placeholder' => "Имя"])->label(false); ?>
        </div>
        <div class="col-lg-6">
            <?= $form->field($entryForm, 'email')->textInput()->input('email',['placeholder' => "E-mail"])->label(false); ?>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-6">
            <?= $form->field($entryForm, 'age')->textInput()->input('age',['placeholder' => "Возраст(полных лет)"])->label(false); ?>
        </div>
        <div class="col-lg-6">
            <?= $form->field($entryForm, 'height')->textInput()->input('height',['placeholder' => "Рост"])->label(false); ?>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-6">
            <?= $form->field($entryForm, 'weight')->textInput()->input('weight',['placeholder' => "Вес"])->label(false); ?>
        </div>
        <div class="col-lg-6">
            <?= $form->field($entryForm, 'city')->textInput()->input('city',['placeholder' => "Город проживания"])->label(false); ?>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-3">
            <p><img class="describe_images" src="computer.png"></img>Нужна ли техника в аренду</p>
        </div>
        <?= $form->field($entryForm, 'checkboxList')->checkboxList(['no'=>'Нет', 'yes_camera'=>'Да,только камера', 'yes_both'=>'да,компьютер и камера'])->label(false) ?>
    </div>
    <div class="row">
        <div class="col-lg-3">
            <p><img class="describe_images" src="English.png"></img>Знание английского</p>
        </div>

        <?= $form->field($entryForm, 'checkboxList1')->checkboxList(['starter'=>'Без знания', 'elementary'=>'Базовый', 'intermediate'=>'Средний','up-intermediate'=>'Высокий','advanced'=>'Превосходный'])->label(false) ?>
    </div>
<div class="row">
        <div class="col-lg-6">
<div class="col-lg-6">
            <p class="add_photo"><img class="describe_images" src="photo.png"></img>Добавить фото(до 5 штук)</p>

   </div>
   <div class="col-lg-6">
 <?= $form->field($entryForm, 'imageFiles[]')->fileInput(['multiple' => true, 'accept' => 'image/*','id'=>'gallery-photo-add'])->label(false) ?>
   </div>


        </div>

        <div class="col-lg-6 pixels-line">
            <div class="preview"></div>
        </div>
    </div>
    <div class="form-group">
        <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
    </div>
<?php ActiveForm::end() ?>

然后我將該代碼添加到我的控制器。 我創建了新的動作ActionForm並將其放入該代碼中:

public function actionForm()
{
    $entryForm = new EntryForm();
     if ($entryForm->load(Yii::$app->request->post()) && $entryForm->insertFormData()) {
     }

}

您的代碼看起來沒問題,所以可能您有一些驗證錯誤。

在insertFormData()方法中添加以下內容以獲取驗證錯誤:

if (!$entryForm->validate()){
    var_dump($entryForm->getErrors());
}

稍后編輯:

你的insertFormData方法基本沒用,因為$ entryForm-> load從POST加載數據。 第二個問題可能是文件上傳。 要獲取上傳的文件,請使用UploadedFile :: getInstance($ model,'imageFile')。 更多信息在這里

我建議你使用Gii(crud生成器)創建一個crud,然后根據上面提到的文檔實現文件上傳。 在這種情況下,您也會看到驗證錯誤。

為什么要重新聲明數據庫中的變量? 你基本上告訴yii忽略桌子上的屬性。

public $id;
public $name;
public $email;
public $age;
public $height;
public $weight;
public $city;
public $checkboxList;
public $checkboxList1;
public $imageFiles;

刪除公共聲明,看看它是否有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM