phpNT - Cropper
 
 
 
, (*1)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΡΡΠ΅Π·Π°Π½ΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Π² ΠΠ ΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅.
Π‘ΠΎΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ:
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°:, (*2)
php composer.phar require "phpnt/yii2-cropper" "*"
ΠΈΠ»ΠΈ, (*3)
composer require phpnt/yii2-cropper "*"
ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² composer.json ΡΠ°ΠΉΠ», (*4)
"phpnt/yii2-cropper": "*"
ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ, (*5)
yii migrate --migrationPath=@vendor/phpnt/yii2-cropper/migrations
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅:
### ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅:
// Π² ΡΠ°ΠΉΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (main.php - Advanced ΠΈΠ»ΠΈ web.php - Basic) 
// Π² controllerMap
...
'controllerMap' => [
        'images' => [
            'class'         => 'phpnt\cropper\controllers\ImagesController',
        ],
    ],
### Π ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, Π³Π΄Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΠ΅Π·Π°ΡΡ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ:
use phpnt\cropper\ImageLoadWidget;
        = ImageLoadWidget::widget([
            'id' => 'load-user-avatar',                                     // ΡΡΡΡΠΈΠΊΡ ID
            'object_id' => $user->id,                                       // ID ΠΎΠ±ΡΠ΅ΠΊΡΠ°
            'imagesObject' => $user->photos,                                // ΡΠΆΠ΅ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
            'images_num' => 1,                                              // ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
            'images_label' => $user->avatar_label,                          // ΠΌΠ΅ΡΠΊΠ° Π΄Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
            'imageSmallWidth' => 750,                                       // ΡΠΈΡΠΈΠ½Π° ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΡ
            'imageSmallHeight' => 750,                                      // Π²ΡΡΠΎΡΠ° ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΡ
            'imagePath' => '/uploads/avatars/',                             // ΠΏΡΡΡ, ΠΊΡΠ΄Π° Π±ΡΠ΄ΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π°Π»ΠΈΠ°ΡΠ°
            'noImage' => 2,                                                 // 1 - no-logo, 2 - no-avatar, 3 - no-img ΠΈΠ»ΠΈ ΠΏΡΡΡ ΠΊ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅
            'buttonClass'=> 'btm btn-info',                                 // ΠΊΠ»Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ "ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π°Π²Π°ΡΠ°Ρ"/"Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π°Π²Π°ΡΠ°Ρ" / ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ btm btn-info
            'previewSize'=> 'file',                                         // ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅Π²ΡΡ(Π»ΠΈΠ±ΠΎ file_small, Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΡΡΠΎ file)
            'pluginOptions' => [                                            // Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π°
                'aspectRatio' => 1/1,                                       // ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΡΠΎΠ½ ΡΠ°ΠΌΠΊΠΈ ΠΎΠ±ΡΠ΅Π·ΠΊΠΈ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅.
                'strict' => false,                                          // true - ΡΠ°ΠΌΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΠΎΠ΄ΠΈΡΡ Π·Π° Ρ
ΠΎΠ»ΡΡ, false - ΠΌΠΎΠΆΠ΅Ρ
                'guides' => true,                                           // ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΠ½ΠΊΡΠΈΡΠ½ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ Π² ΡΠ°ΠΌΠΊΠ΅
                'center' => true,                                           // ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ΅Π½ΡΡ Π² ΡΠ°ΠΌΠΊΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
                'autoCrop' => true,                                         // ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ°ΠΌΠΊΡ ΠΎΠ±ΡΠ΅Π·ΠΊΠΈ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅
                'autoCropArea' => 0.5,                                      // ΠΏΠ»ΠΎΡΠΈΠ΄Ρ ΡΠ°ΠΌΠΊΠΈ Π½Π° Ρ
ΠΎΠ»ΡΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ autoCrop (1 = 100% - 0 - 0%)
                'dragCrop' => true,                                         // ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΡΠ°ΠΌΠΊΠΈ ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠΈ Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Ρ
ΠΎΡΡΠ° (false - Π½Π΅Π»ΡΠ·Ρ)
                'movable' => true,                                          // ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ
ΠΎΠ»ΡΡΠ° (false - Π½Π΅Π»ΡΠ·Ρ)
                'rotatable' => true,                                        // ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ°ΡΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
                'scalable' => true,                                         // ΠΌΠ°ΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
                'zoomable' => false,
            ]]);
        ?>
    
    <div class="col-md-12">
        <?= ImageLoadWidget::widget([
            'id' => 'load-user-photos',                                     // ΡΡΡΡΠΈΠΊΡ ID
            'object_id' => $user->id,                                       // ID ΠΎΠ±ΡΠ΅ΠΊΡΠ°
            'imagesObject' => $user->photos,                                // ΡΠΆΠ΅ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
            'images_num' => 3,                                              // ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
            'images_label' => 'userPhotos',                                 // ΠΌΠ΅ΡΠΊΠ° Π΄Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
            'imageSmallWidth' => 750,                                       // ΡΠΈΡΠΈΠ½Π° ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΡ
            'imageSmallHeight' => 750,                                      // Π²ΡΡΠΎΡΠ° ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΡ
            'imagePath' => '/uploads/avatars/',                             // ΠΏΡΡΡ, ΠΊΡΠ΄Π° Π±ΡΠ΄ΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π°Π»ΠΈΠ°ΡΠ°
            'noImage' => 3,                                                 // 1 - no-logo, 2 - no-avatar ΠΈΠ»ΠΈ ΠΏΡΡΡ ΠΊ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅
            'pluginOptions' => [                                            // Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π°
                'aspectRatio' => 16/9,                                      // ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΡΠΎΠ½ ΡΠ°ΠΌΠΊΠΈ ΠΎΠ±ΡΠ΅Π·ΠΊΠΈ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅.
                'strict' => false,                                          // true - ΡΠ°ΠΌΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΠΎΠ΄ΠΈΡΡ Π·Π° Ρ
ΠΎΠ»ΡΡ, false - ΠΌΠΎΠΆΠ΅Ρ
                'guides' => true,                                           // ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΠ½ΠΊΡΠΈΡΠ½ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ Π² ΡΠ°ΠΌΠΊΠ΅
                'center' => true,                                           // ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ΅Π½ΡΡ Π² ΡΠ°ΠΌΠΊΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
                'autoCrop' => true,                                         // ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ°ΠΌΠΊΡ ΠΎΠ±ΡΠ΅Π·ΠΊΠΈ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅
                'autoCropArea' => 0.5,                                      // ΠΏΠ»ΠΎΡΠΈΠ΄Ρ ΡΠ°ΠΌΠΊΠΈ Π½Π° Ρ
ΠΎΠ»ΡΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ autoCrop (1 = 100% - 0 - 0%)
                'dragCrop' => true,                                         // ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΡΠ°ΠΌΠΊΠΈ ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠΈ Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Ρ
ΠΎΡΡΠ° (false - Π½Π΅Π»ΡΠ·Ρ)
                'movable' => true,                                          // ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ
ΠΎΠ»ΡΡΠ° (false - Π½Π΅Π»ΡΠ·Ρ)
                'rotatable' => true,                                        // ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ°ΡΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
                'scalable' => true,                                         // ΠΌΠ°ΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
                'zoomable' => false,
            ]]);
        ?>
    </div>
### ΠΡΠΈΠΌΠ΅Ρ ΡΠ²ΡΠ·Π΅ΠΉ ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ:
public function getPhotos()
    {
        return $this->hasMany(Photo::className(),
            [
                'object_id' => 'id',
                'type' => 'avatar_label',
            ])->andWhere(['deleted' => 0]);
    }
// ΠΈΠ»ΠΈ
public function getPhotosSome()
    {
        return Photo::find()->where([
            'object_id' => Yii::$app->user->id,
            'type' => 'userPhotoes',
            'deleted' => 0
        ])->all();
    }
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΊΡΠΎΠ½ΠΎΠΌ:
, Π³Π΄Π΅ alias - Π°Π»ΠΈΠ°Ρ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ (ΠΏΡΠΈΠΌΠ΅ΡΡ):
ΠΠ΅ΡΡΠΈΡ:
### 0.0.1
ΠΠΈΡΠ΅Π½Π·ΠΈΡ: