Π€Π°ΠΉΠ»ΠΎΠ²Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Yii2 ΒΆ
- Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π²ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ
- Π€Π°ΠΉΠ»ΠΎΠ²ΡΠ΅ Π°ΡΡΡΠΈΠ±ΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»:
FileStore- Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°;LocaFileStore- ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅;FtpFileStore- Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π° FTP;SftpFileStore- Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ΅ΡΠ΅Π· SFTP;FlysystemFileStore- Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Flysystem;
File- Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ ΡΠ°ΠΉΠ»Π°, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ;UploadFile- Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΡ$_FILES;ThumbFile- ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π²ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ Ρ ΠΊΠ΅ΡΠ΅ΠΌ Π½Π° Π΄ΠΈΡΠΊΠ΅;CSVFile- Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ CSV-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ;CSVResponseFormatter- ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΠ° Π² Π²ΠΈΠ΄Π΅ CSV-ΡΠ°ΠΉΠ»Π°;
FileAttributeBehavior- ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ Π°ΡΡΡΠΈΠ±ΡΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ;FileInputWidget- ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΠ»Π΅ΠΉ ΡΠΎΡΠΌ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²/ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ Π°ΡΡΡΠΈΠ±ΡΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ;
Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ ΒΆ
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²:
$config = [
'components' => [
// Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²
'fileStore' => [
'class' => dicr\file\LocalFileStore::class,
'path' => '@webroot/files', // Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΏΡΡΡ Π½Π° Π΄ΠΈΡΠΊΠ΅
'url' => '@web/files' // Π±Π°Π·ΠΎΠ²ΡΠΉ URL Π΄Π»Ρ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
]
]
];
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅:
/** @var dicr\file\FileStore $store ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° */
$store = Yii::$app->get('fileStore');
// ΠΈΠ»ΠΈ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅
$store2 = dicr\file\LocalFileStore::root();
// ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ pdf
$files = $store->list('pdf');
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΉΠ» ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ
$file = $store->file('pdf/my-report.pdf');
// Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°
echo $file->content;
// Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ url ΡΠ°ΠΉΠ»Π° Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅
echo $file->url;
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π²ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ ΒΆ
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠ΅Π²ΡΡ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΊΠ΅Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅:
$config = [
'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' // Π·Π°Π³Π»ΡΡΠΊΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠ΅Π²ΡΡ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ
]
]
]
];
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π²ΡΡ:
use yii\helpers\Html;
use dicr\file\FileStore;
/** @var FileStore $store */
$store = Yii::$app->get('fileStore');
// ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΉΠ» ΠΈΠ· Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°
$file = $store->file('images/image.jpg');
// Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ ΠΏΡΠ΅Π²ΡΡ
echo Html::img($file->thumb(['width' => 320, 'height' => 240])->url);
Π€Π°ΠΉΠ»ΠΎΠ²ΡΠ΅ Π°ΡΡΡΠΈΠ±ΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΒΆ
ΠΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΠ²Π°ΡΠ°:
use yii\db\ActiveRecord;
use dicr\file\File;
use dicr\file\FileAttributeBehavior;
/**
* @property-read ?File $image ΠΎΠ΄Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°
* @property-read File[] $docs Π½Π°Π±ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²
*
* FileAttributeBehavior
*
* @method bool loadFileAttributes($formName = null)
* @method saveFileAttributes()
* @method File|File[]|null getFileAttribute(string $attribute, bool $refresh = false)
*/
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;
}
}
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ Π°ΡΡΡΠΈΠ±ΡΡΠΎΠ²:
use dicr\file\UploadFile;use yii\db\ActiveRecord;use yii\helpers\Html;
/**
* @var ActiveRecord $model
*/
// Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ ΡΠΎΠ²Π°ΡΡ
$model->image = new UploadFile('/tmp/newimage.jpg');
// ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ
$model->save();
// Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΡΠ΅Π²ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΡΠΎΠ²Π°ΡΠ°
echo Html::img((string)$model->image->thumb(['width' => 320, 'height' => 200]));
// Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΡΡΠ»ΠΊΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠΎΠ²Π°ΡΠ°
foreach ($model->docs ?: [] as $doc) {
echo Html::a($doc->name, $doc->url);
}
Π€ΠΎΡΠΌΠ° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠΎΠ²Π°ΡΠ°:
use dicr\file\FileInputWidget;use yii\db\ActiveRecord;
use yii\widgets\ActiveForm;
/**
* @var ActiveForm $form
* @var ActiveRecord $model
*/
// ΠΏΠΎΠ»Π΅ Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
echo $form->field($model, 'image')->widget(FileInputWidget::class, [
'layout' => 'images',
'limit' => 1,
'accept' => 'image/*',
'removeExt' => true
]);
// ΠΏΠΎΠ»Π΅ Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²
echo $form->field($model, '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.