2017-02-16 632 views
1

我试图将数据从我的表单保存到数据库。但是当我点击“提交”按钮什么都没有发生(页面刷新,但我的数据库表为空)我做错了什么? 我创建模型,扩展ActiveRecord的:将数据保存到数据库yii2

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('[email protected]') 
       ->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()) { 
    } 

} 

回答

0

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

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

删除公共声明,看看它是否工作。

0

您的代码看起来没问题,所以可能会出现一些验证错误。

在insertFormData()方法中添加如下得到验证错误:

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

后来编辑:因为$ entryForm->负荷加载从数据

你insertFormData方法根本没用POST。 第二个问题可能是文件上传。要获取上传的文件,请使用UploadedFile :: getInstance($ model,'imageFile')。更多信息here

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

+0

我把你的代码,但什么都没有发生 – Rosti

+0

看到更新的anwser –