This component provide ability to attach and upload
All uploaded files by default stored in database and have TEMPORARY
status.
When model with attachments save yourself, all files attached to the model change their status to permanent.
php yii attachment/manager/clear
clears all temporary files from system
Configure Manager
component
return [
'components' => [
'attachmentManager' => [
'class' => 'artkost\attachment\Manager',
'storageUrl' => '@web/storage',
'storagePath' => '@webroot/storage',
'attachmentFileTable' => '{{%attachment_file}}'
]
]
]
Create your own type of file
namespace app\modules\user\models;
use artkost\attachment\models\ImageFile;
class UserAvatarFile extends ImageFile
{
const TYPE = 'userProfile';
//subfolder of storgae folder
public $path = 'user/profile';
}
Create model that have attachment_id
field, and attach behavior to it
ATTENTION: model can have only one instance of behavior
/**
* Class Profile
* @package app\modules\user\models
* User profile model.
*
* @property integer $user_id User ID
* @property string $name Name
* @property string $surname Surname
* @property int $avatar_id Avatar //our attachment_id
* @property boolean $sex
*
* @property User $user User
* @property UserAvatarFile $avatar avatar file
*/
class UserProfile extends ActiveRecord
{
public static function tableName()
{
return '{{%user_profile}}';
}
public function behaviors()
{
return [
'attachBehavior' => [
'class' => AttachBehavior::className(),
'models' => [
'avatar' => [
'class' => UserAvatarFile::className()
]
]
]
];
}
public function getAvatar()
{
// simply helper method with predefined conditions
return $this->hasOneAttachment('avatar', ['id' => 'avatar_id']);
}
}
Currently supported only FileAPI
upload, but you can add yours.
Add action into controller
namespace app\modules\user\controllers;
use artkost\attachmentFileAPI\actions\UploadAction as FileAPIUpload;
use app\modules\user\models\UserProfile;
/**
* Profile controller for authenticated users.
*/
class ProfileController extends Controller
{
public function actions()
{
return [
'fileapi-upload' => [
'class' => FileAPIUpload::className(),
'modelClass' => UserProfile::className(),
'attribute' => 'avatar'
//'accessCheck' => function($action) { }
]
];
}
}
in action view file you can use widget for upload files
use artkost\attachmentFileAPI\widgets\File as FileAPIWidget;
?>
...
<?= $form->field($model, 'preview')->widget(
FileAPIWidget::className(),
[
'url' => ['upload-preview'],
'settings' => [
'autoUpload' => true
]
]
)->label(false) ?>