将数据保存到db yii2

时间:2017-02-16 14:03:20

标签: php 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()) {
     }

}

2 个答案:

答案 0 :(得分:0)

您的代码看起来不错,所以可能您有一些验证错误。

在insertFormData()方法中添加以下内容以获取验证错误:

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

稍后编辑:

你的insertFormData方法基本没用,因为$ entryForm-&gt; load从POST加载数据。 第二个问题可能是文件上传。要获取上传的文件,请使用UploadedFile :: getInstance($ model,'imageFile')。更多信息here

我建议你使用Gii(crud生成器)创建一个crud,然后根据上面提到的文档实现文件上传。在这种情况下,您也会看到验证错误。

答案 1 :(得分:0)

为什么要重新声明数据库中的变量?你基本上告诉yii忽略桌子上的属性。

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

删除公开声明并查看它是否有效。