Задать вопрос

Файл почему то не прикрепляется к модели User в Yii2, почему?

У меня есть собственный класс UploadBind, который служит для привязки файлов к моделям в системе, я хочу реализовать изменение пользователя PUT запросом при это добавляя файл в запросе на клиенте, у меня уже все работает с другими моделями, но вот с моделью User не работает, при этом если я вывозу метод UploadBind::manage (ниже прикреплю где я его вызываю), то во всей моей системе перестают работать привязка файлов PUT запросом (POST не ломается)
Моя модель User (не полная):
<?php

namespace app\modules\user\models;

use app\models\UploadBind;

class User extends ActiveRecord implements IdentityInterface
{
	public $avatar;
	
	public function rules()
	{
		$rules = [
                        ...
			[self::uploadAttrs(), 'safe'],
			[['avatar'], 'safe'],
		
		];
		
		return $rules;
	}
	
	
	
	public function afterSave($insert, $changedAttributes)
	{
		parent::afterSave($insert, $changedAttributes);
		// При вызове метода manage в этой модели, во всех других моделях перестаёт работать
		// PUT запрос, POST запросы работают нормально
		UploadBind::manage($this, self::uploadAttrs());
	}
	
	public function fields()
	{
		$fields = parent::fields();
		
		unset($fields['password']);
		
		$fields['avatar'] = function (User $model) {
			return UploadBind::get($model, 'avatar', ['active' => 1]);
		};

		return $fields;
	}
	
	public static function uploadAttrs ()
	{
		return [
			'avatar',
		];
	}
	
}

Вот сам метод Manage в модели UploadBind:
public static function manage($model, $attrs, $uploadManagerData = null)
	{
		$fn = __METHOD__;
		$log = 0;
		
		$createdBinds = UploadBind::createAll($model, $attrs);
		
		$uploadManagerData = $uploadManagerData ?? Yii::$app->request->post('UploadManager');
		
		if ($model) {
			
			$binds = UploadBind::findAll([
				'model_name' => $model::className(),
				'model_id' => $model->getAttribute('id'),
				'model_attr' => $attrs,
			]);
			
			// mapping
			
			$bindsMapToId = [];
			
			foreach ($binds as $bind) {
				$bindsMapToId[$bind->id] = $bind;
				if ($uploadManagerData) {
					$bind->name = $uploadManagerData[$bind->model_attr]['name'][$bind->id];
					$bind->about = $uploadManagerData[$bind->model_attr]['about'][$bind->id];
					$bind->save();
				}
			}
			
			// deleting
			
			$allDeletedIds = [];
			
			if ($uploadManagerData) {
				foreach ($uploadManagerData as $attr => $data) {
					\app\helpers\Utils::log2($log, $fn, $data, '$data', 0);
					$deletedIdsString = $data['deleted'];
					if ($deletedIdsString) {
						$deletedIdsArray = explode(',', $deletedIdsString);
						$allDeletedIds += $deletedIdsArray;
					}
				}
			}
			
			//\app\helpers\Utils::log2($log, $fn, $allDeletedIds, '$allDeletedIds', 0);
			
			$cmd = Yii::$app->db->createCommand()->update('upload_bind', ['active' => 0], ['id' => $allDeletedIds]);
			
			$cmd->execute();
			
			// reordering
			
			if ($uploadManagerData) {
				foreach ($uploadManagerData as $attr => $data) {
					$order = explode(',', $data['order']);
					
					foreach ($order as $id) {
						$bind = $bindsMapToId[$id];
						
						if ($bind) {
							$sort = array_search($bind->id, $order);
							$bind->sort = $sort;
							$bind->save();
						}
					}
				}
			}
			
		}
		
		return $createdBinds;
	}

Во всех других моделях привязка файлов вызывается и объявляется также, и я понятия не имею почему в User так не работает (мб это из за IdentityInterface но я не уверен)
  • Вопрос задан
  • 111 просмотров
Подписаться 4 Средний 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект