2017 © Pedro PelΓ‘ez
 

yii2-extension imageuploader

БСрвис для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, сдСланный Ρ‡Π΅Ρ€Π΅Π· Ρ‚Ρ€Π΅ΠΉΡ‚Ρ‹.

image

bubogumy/imageuploader

БСрвис для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, сдСланный Ρ‡Π΅Ρ€Π΅Π· Ρ‚Ρ€Π΅ΠΉΡ‚Ρ‹.

  • Wednesday, September 6, 2017
  • by bubogumy
  • Repository
  • 0 Watchers
  • 1 Stars
  • 2 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 4 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Imagine Extension for Yii 2, (*1)

Установка

Π’ composer.json, (*2)

"require": {
    "bubogumy/imageuploader": "dev-master"
}

Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ composer require bubogumy/imageuploader, (*3)

Настройка

  1. ДобавляСм Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅:
    'imageUploader' => [
                'class' => 'bubogumy\imageService',
                'url' => '',
                'staticUrl' => 'http://localhost/web',
                'baseUploadPath' => ''
            ],
  1. Π’ Π½ΡƒΠΆΠ½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° наш класс 'upload' => 'bubogumy\UploadAction'

Π’ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ добавляСм, (*4)

    $model = new UserProfile();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->goBack();
    }
    return $this->render('index', [
        'model' => $model,
    ]);
  1. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ модСль нашСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, наслСдовав ActiveRecord, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π½Π° Ρ‚Ρ€Π΅ΠΉΡ‚ UploadTrait ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π² интСрфСйсный класс UploadInterface с описаниСм событиС. Π’Π°ΠΊ ΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° события., (*5)

  2. Π”Π°Π΅ΠΌ ΠΏΡ€Π°Π²Π° Π½Π° созданиС ΠΏΠ°ΠΏΠΎΠΊ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ., (*6)

  3. Π€Π°ΠΉΠ» clear-temp чистит автоматичСски ΠΏΠ°ΠΏΠΊΡƒ temp, (*7)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

ОписаниС моСй модСли:, (*8)

namespace app\models;

use bubogumy\UploadInterface;
use bubogumy\UploadTrait;
use yii\db\ActiveRecord;  

/**
 * This is the model class for table "lang_data.user_profile".
 *
 * @property int $id
 * @property string $name
 * @property string $logo
 * @property string $logo_prev
 */
class UserProfile extends ActiveRecord implements UploadInterface
{
    use UploadTrait;

    public $filename;

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'lang_data.user_profile';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['name', 'logo', 'logo_prev'], 'string', 'max' => 255],
        ];
    }

    /**
     * @inheritdoc
     */
    public function userFind()
    {
        UserProfile::find()
            ->all();
    }

    /**
     * @return array
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'name' => 'Name',
            'logo' => 'Logo',
            'logo_prev' => 'Logo Prev',
        ];
    }

    /**
     * ID ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
     *
     * @return int
     */
    public function getUserId()
    {
        return 1;
    }

    /**
     * АдрСс Π΄ΠΎ сурс ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ
     *
     * @return string
     */
    public function pathSettings()
    {
        return '/profile_logo/src/';
    }

    /**
     * @return bool
     */
    public function beforeUploadEvent()
    {
        return true;
    }

    /**
     * АдрСс Π½Π° ΠΏΡ€Π΅Π²ΡŒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ
     *
     * @return string
     */
    public function pathPreviewSettings()
    {
        return '/profile_logo/preview/';
    }

    /**
     * Атрибут сурс ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ
     *
     * @return string
     */
    public function attributeSettings()
    {
        return 'logo';
    }

    /**
     * Атрибут ΠΏΡ€Π΅Π²ΡŒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ
     *
     * @return string
     */
    public function attributePreviewSettings()
    {
        return 'logo_prev';
    }

    /**
     * ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ адрСса ΠΈΠ· Π±Π΄ Π΄ΠΎ сурса
     *
     * @return string
     */
    public function getFileSettings()
    {
        return $this->logo;
    }

    /**
     * ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ адрСса ΠΈΠ· Π±Π΄ Π΄ΠΎ ΠΏΡ€Π΅Π²ΡŒΡŽ
     *
     * @return string
     */
    public function getFilePreviewSettings()
    {
        return $this->logo_prev;
    }

    /**
     * Подпись Π½Π° события
     */
    public function init()
    {
        $this->subscribeEvent();
        parent::init();
    }
}

Π’ index.php присваиваСм $model = new bubogumy\UserProfile();
ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ jQuery для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ajax запросов
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΡƒ, (*9)

    <form enctype="multipart/form-data" method="post" action="/site/upload" id="form">
        <input type="file" name="file">
        <input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" />
        <input type="submit" value="Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ" class="btn">
    </form>

ДобавляСм Ajax, (*10)

    <script>
        $(function(){
            $('#form').on('submit', function(e){
                e.preventDefault();
                var $that = $(this),
                formData = new FormData($that.get(0));
                $.ajax({
                    url: $that.attr('action'),
                    type: $that.attr('method'),
                    contentType: false,
                    processData: false,
                    data: formData,
                    dataType: 'html',
                    success: function(form){
                        if(form){
                            $that.replaceWith(form);
                        }
                    }
                });
            });
        });
    </script>

Для ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠŸΡ€Π΅ΡŒΠ²ΡŽ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ добавляСм, (*11)

    <?php if (isset($fileUrl)) :?>
        <?php $form = ActiveForm::begin(['action' => ['index']]); ?>
            <img src="<?= $fileUrl ?>" height="100px">
            <?= $form->field($model, 'logo')->hiddenInput(['value' => $filename]) ?>
            <?= $form->field($model, 'logo_prev')->hiddenInput(['value' => $filename]) ?>
            <div class="form-group">
                <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
            </div>
        <?php ActiveForm::end(); ?>
    <?php endif; ?>

The Versions

06/09 2017

dev-master

9999999-dev

БСрвис для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, сдСланный Ρ‡Π΅Ρ€Π΅Π· Ρ‚Ρ€Π΅ΠΉΡ‚Ρ‹.

  Sources   Download

The Requires