У меня есть собственный класс 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 но я не уверен)