2015-07-12 63 views
-1

问候,Yii2 - foreach循环保存所有文件路径,数据库模型

我用了Yii2多个文件上传输入。 多音轨文件输入可以很好地保存在名为audio的文件夹中选择的文件。 问题是我不能在foreach循环中保存数据库模型Faixas.php中的每个文件的名称和路径在名为ficheiro的字段内。

这里是我的代码:

控制器:

public function actionCreate() 
{ 
    $model = new Faixas(); 

    if (Yii::$app->request->isPost) { 
     $model->files = UploadedFile::getInstances($model, 'files'); 
     if ($model->upload()) { 
      return $this->render('create', ['model' => $model]); 
     } 
    } 

    return $this->render('create', ['model' => $model]); 
} 

模型作为命名上传功能()保存在文件夹中的文件,但部分保存模型 - 内> ficheiro不工作(不看着办吧?):

public function rules() 
{ 
    return [ 
     [['nome', 'ficheiro', 'dummy1', 'dummy2', 'dummy3', 'dummy4', 'dummy5'], 'string', 'max' => 255], 
     [['files'], 'file', 'skipOnEmpty' => false, 'extensions' => 'mp3, ogg, webm', 'maxFiles' => 30], 
    ]; 
} 

public function upload() 
{ 
    $model = new Faixas(); 
    if ($this->validate()) { 
     foreach ($this->files as $file) { 
       $file->saveAs('audio/' . $file->baseName . '.' . $file->extension); 

       // this part in not working, why ???? 
       $filePath = 'audio/' . $file->baseName . '.' . $file->extension; 
       $model->ficheiro = $filePath; 
       $model->save(); 
    } 
     return true; 
    } else { 
     return false; 
    } 
} 

最后的观点,这使得输入:

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?> 

<?= $form->field($model, 'files[]')->fileInput(['multiple' => true, 'accept' => 'audio/*']) ?> 

<button>Submit</button> 

在途中任何想法把它做? 非常感谢...

整个Faixas.php模型类:

<?php 

namespace app\models; 

use Yii; 

/** 
* This is the model class for table "faixas". 
* 
* @property integer $id 
* @property string $nome 
* @property string $ficheiro 
* @property string $dummy1 
* @property string $dummy2 
* @property string $dummy3 
* @property string $dummy4 
* @property string $dummy5 
*/ 
class Faixas extends \yii\db\ActiveRecord 
{ 
    /** 
    * @inheritdoc 
    */ 
public static function tableName() 
{ 
    return 'faixas'; 
} 

public $files; 

/** 
* @inheritdoc 
*/ 
public function rules() 
{ 
    return [ 
     [['nome', 'ficheiro', 'dummy1', 'dummy2', 'dummy3', 'dummy4', 'dummy5'], 'string', 'max' => 255], 
     [['files'], 'file', 'skipOnEmpty' => false, 'extensions' => 'mp3, ogg, webm', 'maxFiles' => 30], 
    ]; 
} 

public function upload() 
{ 

    if ($this->validate()) { 
     foreach ($this->files as $file) { 
       $file->saveAs('audio/' . $file->baseName . '.' . $file->extension); 
       $model = new Faixas(); 
       // this part in not working, why ???? 
       $filePath = 'audio/' . $file->baseName . '.' . $file->extension; 
       $model->ficheiro = $filePath; 
       $model->save(); 
    } 
     return true; 
    } else { 
     return false; 
    } 
} 

/** 
* @inheritdoc 
*/ 
public function attributeLabels() 
{ 
    return [ 
     'id' => Yii::t('app', 'ID'), 
     'nome' => Yii::t('app', 'Nome'), 
     'ficheiro' => Yii::t('app', 'Ficheiro'), 
     'dummy1' => Yii::t('app', 'Dummy1'), 
     'dummy2' => Yii::t('app', 'Dummy2'), 
     'dummy3' => Yii::t('app', 'Dummy3'), 
     'dummy4' => Yii::t('app', 'Dummy4'), 
     'dummy5' => Yii::t('app', 'Dummy5'), 
    ]; 
} 

// coloca o Audio na GridView 
public function getAudio() 
{ 
    return \Yii::$app->request->BaseUrl.'/'.$this->ficheiro; 
} 

}

回答

0

解决......从模型中删除文件的规则:

[ '文件'], '文件', 'skipOnEmpty'=>假, '扩展'=>“MP3 ,ogg,webm','maxFiles'=> 30],

现在foreach()循环保存数据库中的每个文件路径。

非常感谢所有那些以某种方式试图达到解决方案。

2

看来你创建wrog地方的模型。您可以在回路中创建一个$model = new Faixas();。尝试在里面创建。

public function upload() 
{ 

    if ($this->validate()) { 
    foreach ($this->files as $file) { 
      $file->saveAs('audio/' . $file->baseName . '.' . $file->extension); 

      $model = new Faixas(); 


      $filePath = 'audio/' . $file->baseName . '.' . $file->extension; 
      $model->ficheiro = $filePath; 
      $model->save(); 
    } 
    return true; 
    } else { 
    return false; 
    } 
} 
+0

它没有工作。 $ model-> ficheiro继续空着。 :(谢谢你的试用 –

+0

你能告诉我Faixas模型类吗?? – scaisEdge

+0

它在视图之上,只有2个主要功能。你需要看到所有文件吗? –