jaslin / yii2-upload-behavior
Upload behavior for Yii 2
Installs: 163
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 56
Type:yii2-extension
Requires
- php: >=5.4.0
- yiisoft/yii2: *
- yiisoft/yii2-imagine: *
This package is not auto-updated.
Last update: 2025-03-29 20:44:59 UTC
README
This behavior automatically uploads file and fills the specified attribute with a value of the name of the uploaded file.
Installation
The preferred way to install this extension is through composer.
Either run
php composer.phar require --prefer-dist mongosoft/yii2-upload-behavior "*"
or add
"mongosoft/yii2-upload-behavior": "*"
to the require
section of your composer.json
file.
Usage
Upload file
Attach the behavior in your model:
class Document extends ActiveRecord { /** * @inheritdoc */ public function rules() { return [ ['file', 'file', 'extensions' => 'doc, docx, pdf', 'on' => ['insert', 'update']], ]; } /** * @inheritdoc */ function behaviors() { return [ [ 'class' => UploadBehavior::className(), 'attribute' => 'file', 'scenarios' => ['insert', 'update'], 'path' => '@webroot/upload/docs', 'url' => '@web/upload/docs', ], ]; } }
Example view file:
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?> <?= $form->field($model, 'image')->fileInput() ?> <div class="form-group"> <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?> </div> <?php ActiveForm::end(); ?>
Upload image and create thumbnails
Attach the behavior in your model:
class User extends ActiveRecord { /** * @inheritdoc */ public function rules() { return [ ['image', 'image', 'extensions' => 'jpg, jpeg, gif, png', 'on' => ['insert', 'update']], ]; } /** * @inheritdoc */ public function behaviors() { return [ 'image' => [ 'class' => UploadImageBehavior::className(), 'attribute' => 'image', 'scenarios' => ['insert', 'update'], 'placeholder' => '@app/modules/user/assets/images/userpic.jpg', 'path' => '@webroot/upload/user/{id}', 'url' => '@web/upload/user/{id}', 'thumbs' => [ 'thumb' => ['width' => 400, 'quality' => 90], 'preview' => ['width' => 200, 'height' => 200], ], ], ]; } }
Example view file:
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?> <div class="form-group"> <div class="row"> <div class="col-lg-6"> <!-- Original image --> <?= Html::img($model->getUploadUrl('image'), ['class' => 'img-thumbnail']) ?> </div> <div class="col-lg-4"> <!-- Thumb 1 (thumb profile) --> <?= Html::img($model->getThumbUploadUrl('image'), ['class' => 'img-thumbnail']) ?> </div> <div class="col-lg-2"> <!-- Thumb 2 (preview profile) --> <?= Html::img($model->getThumbUploadUrl('image', 'preview'), ['class' => 'img-thumbnail']) ?> </div> </div> </div> <?= $form->field($model, 'image')->fileInput(['accept' => 'image/*']) ?> <div class="form-group"> <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?> </div> <?php ActiveForm::end(); ?>
RESTfull
If you use UploadBehavior in RESTfull application and you do not need a prefix of the model name, set the property instanceByName = false
:
/** * @inheritdoc */ function behaviors() { return [ [ 'class' => UploadBehavior::className(), 'attribute' => 'file', 'instanceByName' => true, 'scenarios' => ['insert', 'update'], 'path' => '@webroot/upload/docs', 'url' => '@web/upload/docs', ], ]; }