問候,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;
}
}
它沒有工作。 $ model-> ficheiro繼續空着。 :(謝謝你的試用 –
你能告訴我Faixas模型類嗎?? – scaisEdge
它在視圖之上,只有2個主要功能。你需要看到所有文件嗎? –