Обязательная Загрузка файлов только если они не были загружены ранее

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
vipTelnet
Сообщения: 58
Зарегистрирован: 2013.02.20, 13:29

Обязательная Загрузка файлов только если они не были загружены ранее

Сообщение vipTelnet »

Всем привет.

Есть поле для загрузки файлов, которое нормально работает и проблем с самой загрузкой не возникает, но нужно сделать так что б файлы обязательно загружались пользователем, только в том случае, если он не загружал их ранее.

В модели использую следующие правила валидации

Код: Выделить всё

[['foto'], 'file', 'skipOnEmpty' => true, 'skipOnError' => true, 'extensions' => 'png, jpg', 'maxFiles' => 0],
Это позволяет загружать файлы

Если добавляю еще 1 правило

Код: Выделить всё

[['foto'], 'required'],
[['foto'], 'file', 'skipOnEmpty' => true, 'skipOnError' => true, 'extensions' => 'png, jpg', 'maxFiles' => 0],
То теперь работает правило обязательно, и если пользователь впервые зашел то так и должно быть, он должен обязательно сразу загрузить этот файл.
Но если после первой загрузки пользователь опять зашел на эту страницу, то она опять обязательно требует от него загрузить этот файл снова.
А нужно что б он если он его ранее загружал, это правило обязательной загрузки больше не действовало.
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: Обязательная Загрузка файлов только если они не были загружены ранее

Сообщение dmg »

Добавьте в бд поле для хранения имени файла и записывайте туда имя загруженного файла.
При валидации добавьте опцию when.
vipTelnet
Сообщения: 58
Зарегистрирован: 2013.02.20, 13:29

Re: Обязательная Загрузка файлов только если они не были загружены ранее

Сообщение vipTelnet »

Спасибо разобрался теперь проверка выглядит так

Код: Выделить всё

['foto', 'required', 'when' => function($model) {
                $attachments = Attachments::find()->where(['mariner_id'=>$model->id, 'type'=>'foto'])->all();
                return count($attachments) ? true : false;
            }],
Ответить