Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека Ð´Ð»Ñ Yii2 ¶
- РабоÑа Ñ ÑайловÑм Ñ ÑанилиÑем
- Создание пÑевÑÑ ÐºÐ°ÑÑинок
- ФайловÑе аÑÑÑибÑÑÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸
СодеÑÐ¶Ð¸Ñ ÑледÑÑÑий ÑÑнкÑионал:
AbstractFileStore
- абÑÑÑакÑÐ¸Ñ Ñайлового Ñ ÑанилиÑа;LocaFileStore
- ÑеализаÑÐ¸Ñ Ñ ÑанилиÑа в локалÑной Ñайловой ÑиÑÑеме;FtpFileStore
- Ñ ÑанилиÑе Ñайлов на FTP;SftpFileStore
- Ñ ÑанилиÑе Ñайлов ÑеÑез SFTP;FlysystemFileStore
- Ñ ÑанилиÑе ÑеÑез библиоÑÐµÐºÑ Flysystem;
StoreFile
- абÑÑÑакÑÐ¸Ñ Ñайла, поддеÑжка опеÑаÑий Ñ Ñайлом;UploadFile
- загÑÑзка Ñайлов в Ñ ÑанилиÑе из дÑÑгого Ñайла или даннÑÑ$_FILES
;ThumbFile
- Ñоздание пÑевÑÑ ÐºÐ°ÑÑинок Ñ ÐºÐµÑем на диÑке;CSVFile
- абÑÑÑакÑÐ¸Ñ Ð´Ð»Ñ ÑабоÑÑ Ñ CSV-Ñайлами;CSVResponseFormatter
- ÑоÑмиÑование оÑвеÑа в виде CSV-Ñайла;
FileAttributeBehavior
- поддеÑжка ÑайловÑÑ Ð°ÑÑÑибÑÑов моделей;FileInputWidget
- поддеÑжка полей ÑоÑм Ð´Ð»Ñ Ð·Ð°Ð³ÑÑзки и ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñайлов/каÑÑинок аÑÑÑибÑÑов моделей;
РабоÑа Ñ ÑайловÑм Ñ ÑанилиÑем ¶
ÐонÑигÑÑаÑÐ¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñа на пÑимеÑе локалÑного Ñ ÑанилиÑа Ñайлов:
'components' => [
// Ñ
ÑанилиÑе Ñайлов
'fileStore' => [
'class' => dicr\file\LocalFileStore::class,
'path' => '@webroot/files', // базовÑй пÑÑÑ Ð½Ð° диÑке
'url' => '@web/files' // базовÑй URL Ð´Ð»Ñ ÑкаÑÐ¸Ð²Ð°Ð½Ð¸Ñ (опÑионалÑно)
]
];
ÐÑполÑзование:
// полÑÑаем наÑÑÑоеннÑй ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ñ
ÑанилиÑа
$store = Yii::$app->get('fileStore');
// или напÑÐ¸Ð¼ÐµÑ Ñ
ÑанилиÑе в локалÑной Ñайловой ÑиÑÑеме
$store = LocalFileStore::root();
// ÑпиÑок Ñайлов Ñ
ÑанилиÑа в диÑекÑоÑии pdf
$files = $store->list('pdf');
// ÐолÑÑаем Ñайл по имени
$file = $store->file('pdf/my-report.pdf');
// вÑводим ÑодеÑжимое Ñайла
echo $file->content;
// вÑводим url Ñайла в Ñ
ÑанилиÑе
echo $file->url;
Создание пÑевÑÑ ÐºÐ°ÑÑинок ¶
ÐÐ»Ñ ÑабоÑÑ Ñ Ð¿ÑевÑÑ Ð½Ñжно наÑÑÑоиÑÑ ÐºÐµÑ ÐºÐ°ÑÑинок в локалÑной Ñайловой ÑиÑÑеме:
'components' => [
// Ñ
ÑанилиÑе Ð´Ð»Ñ Ð¿ÑевÑÑ ÐºÐ°ÑÑинок
'thumbStore' => [
'class' => dicr\file\LocalFileStore::class,
'path' => '@webroot/thumb',
'url' => '@web/thumb',
],
// оÑновное Ñ
ÑанилиÑе Ñайлов
'fileStore' => [
'class' => dicr\file\LocalFileStore::class,
'path' => '@webroot/files',
// конÑигÑÑаÑÐ¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñа Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÑевÑÑ
'thumbFileConfig' => [
'store' => 'thumbStore', // ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ñ
ÑанилиÑа Ð´Ð»Ñ ÐºÑÑа каÑÑинок
'noimage' => '@webroot/res/img/noimage.png' // заглÑÑка Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÑевÑÑ Ð½ÐµÑÑÑеÑÑвÑÑÑиÑ
Ñайлов моделей
]
]
];
ÐÑполÑзование пÑевÑÑ:
// полÑÑаем Ñайл из Ñ
ÑанилиÑа
$file = $store->file('images/image.jpg');
// вÑводим каÑÑÐ¸Ð½ÐºÑ Ð¿ÑевÑÑ
echo Html::img($file->thumb(['width' => 320, 'height' => 240])->url);
ФайловÑе аÑÑÑибÑÑÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸ ¶
ÐÑÐ¸Ð¼ÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸ ÑоваÑа:
/**
* @property-read ?StoreFile $image одна каÑÑинка
* @property-read StoreFile[] $docs Ð½Ð°Ð±Ð¾Ñ Ñайлов докÑменÑов
*/
class Product extends ActiveRecord
{
/**
* @inheritDoc
*/
public function behaviors() : array
{
return [
// добавлÑем ÑайловÑе аÑÑÑибÑÑÑ
'file' => [
'class' => FileAttributeBehavior::class,
'attributes' => [
'image' => 1, // одна каÑÑинка
'docs' => 0 // неогÑаниÑенное кол-во Ñайлов
]
]
];
}
/**
* @inheritDoc
*/
public function load($data, $formName = null) : bool
{
$ret = parent::load($data, $formName);
// загÑÑжаем ÑайловÑе аÑÑÑибÑÑÑ
if ($this->loadFileAttributes($formName)) {
$ret = true;
}
return $ret;
}
}
ÐÑполÑзование ÑайловÑÑ Ð°ÑÑÑибÑÑов:
// добавлÑем каÑÑÐ¸Ð½ÐºÑ ÑоваÑÑ
$prod->image = new UploadFile('/tmp/newimage.jpg');
// ÑоÑ
ÑанÑем
$prod->save();
// вÑводим пÑевÑÑ ÐºÐ°ÑÑинки ÑоваÑа
echo Html::img((string)$prod->image->thumb(320, 200));
// вÑводим ÑÑÑлки загÑÑзки Ñайлов ÑоваÑа
foreach ($prod->docs ?: [] as $doc) {
echo Html::a($doc->name, $doc->url);
}
ФоÑма ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñайлов ÑоваÑа:
// поле Ñ Ð²Ð¸Ð´Ð¶ÐµÑом ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°ÑÑинки
echo $form->field($prod, 'image')->widget(FileInputWidget::class, [
'layout' => 'images',
'limit' => 1,
'accept' => 'image/*',
'removeExt' => true
]);
// поле Ñ Ð²Ð¸Ð´Ð¶ÐµÑом ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾ÐºÑменÑов
echo $form->field($prod, 'docs')->widget(FileInputWidget::class, [
'layout' => 'files',
'limit' => 0,
'removeExt' => true
]);
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.