dev-master
9999999-devΠ‘Π΅ΡΠ²ΠΈΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠΉ ΡΠ΅ΡΠ΅Π· ΡΡΠ΅ΠΉΡΡ.
The Requires
Π‘Π΅ΡΠ²ΠΈΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠΉ ΡΠ΅ΡΠ΅Π· ΡΡΠ΅ΠΉΡΡ.
ΠΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Imagine Extension for Yii 2, (*1)
Π composer.json, (*2)
"require": { "bubogumy/imageuploader": "dev-master" }
Π ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ composer require bubogumy/imageuploader
, (*3)
'imageUploader' => [ 'class' => 'bubogumy\imageService', 'url' => '', 'staticUrl' => 'http://localhost/web', 'baseUploadPath' => '' ],
'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, ]);
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π°ΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ, Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π² ActiveRecord
, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ² Π½Π° ΡΡΠ΅ΠΉΡ UploadTrait
ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ UploadInterface
Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅. Π’Π°ΠΊ ΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΡ., (*5)
ΠΠ°Π΅ΠΌ ΠΏΡΠ°Π²Π° Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΏΠΎΠΊ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ., (*6)
Π€Π°ΠΉΠ» 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; ?>
Π‘Π΅ΡΠ²ΠΈΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠΉ ΡΠ΅ΡΠ΅Π· ΡΡΠ΅ΠΉΡΡ.