Что-то не могу понять, при загрузке файлов не проходят файлы с расширениями docx и txt, остальные проходят и грузятся. Причем ошибка происходит уже в процессе загрузки. Помогите понять, что не так?
Контроллер:
<?php
namespace backend\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use yii\web\Controller;
use backend\models\Fileload;
use yii\web\UploadedFile;
class FileloadController extends Controller
{
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['login', 'error'],
'allow' => true,
],
[
'actions' => ['logout', 'index', 'update', 'view', 'create', 'delete'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['POST'],
],
],
];
}
public function actionIndex()
{
$model = new Fileload();
$dir = Yii::getAlias('@uploads') . '/files/';
$name = 'price_titankbr';
if (Yii::$app->request->isPost) {
$model->loadFile = UploadedFile::getInstance($model, 'loadFile');
$this->deleteIfExists($dir);
if ($model->upload($dir, $name)) {
// file is uploaded successfully
return $this->redirect(['fileload/index']);
}
}
return $this->render('upload', ['model' => $model]);
}
private function deleteIfExists($dir)
{
$files = scandir($dir);
$files = array_slice($files,2);
//print_r($files); exit;
foreach($files as $fl){
unlink($dir . $fl);
}
}
}
Форма:
<?php
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($model, 'loadFile')->fileInput()->label('Файл прайс-листа') ?>
<button>Загрузить</button>
<?php ActiveForm::end() ?>
Модель:
<?php
namespace backend\models;
use Yii;
use yii\base\Model;
use yii\web\UploadedFile;
class Fileload extends Model
{
/**
* @var loadFile
*/
public $loadFile;
public $maxSize = 1024*1024*2;
public $tooBig = 'Файл не должен превышать 2Мб';
public function rules()
{
return [
[['loadFile'], 'file', 'skipOnEmpty' => false, 'extensions' => ['pdf', 'doc', 'docx', 'txt', 'xls', 'xlsx'], 'maxSize' => $this->maxSize, 'tooBig' => $this->tooBig],
];
}
public function upload($dir, $name)
{
if ($this->validate()) {
$this->loadFile->saveAs($dir . $name . '.' . $this->loadFile->extension);
Yii::$app->session->setFlash('success', "Прайс-лист обновлен");
return true;
} else {
return false;
}
}
}