Yii2. Пустое поле загрузки файла при редактировании.
Yii2. Пустое поле загрузки файла при редактировании.
Ситуация такова. Имеется поле file, которое загружает файл и сохраняет имя файла в БД. Если я редактирую запись, в которой уже имеется загруженный ранее файл, но при этом оставляю поле file нетронутым (например, требуется изменить только заголовок), то соответствующее поле в БД становится пустым. Кроме того, если поле является обязательным для заполнения, то форма вообще отказывает отправляться, требуя загрузить новый файл. Как правильно поступать в такой ситуации?
The difficult I’ll do right now. The impossible will take a little while.
Re: Yii2. Пустое поле загрузки файла при редактировании.
Обязательным такое поле делать не надо. Или делать условно обязательным - только для новых файлов. И проверять, был ли выбран файл или не был.
Re: Yii2. Пустое поле загрузки файла при редактировании.
Я могу придумать способы обойти эту проблему. Просто, я надеялся, что фреймворк предусматривает подобные случаи, а я просто не знаю такие механизмы. На сколько я помню, в первом yii было свойство skipOnEmpty, или как-то так. Теперь такой штуки либо нет, либо механизм её использования изменился, а я об этом не знаю.
The difficult I’ll do right now. The impossible will take a little while.
Re: Yii2. Пустое поле загрузки файла при редактировании.
Но сочетать required со skipOnEmpty как минимум странно
Re: Yii2. Пустое поле загрузки файла при редактировании.
Ну, я считал, что это нормальная ситуация - когда картинка обязательна для загрузки, но когда она уже загружена, то поле перестаёт быть обязательным (ведь оно уже заполнено). Да даже и не в обязательности проблема. Я могу сделать его необязательным, это не критично. Критично то, что оно становится пустым после редактирования.
По поводу skipOnEmpty. Я пробовал делать так:
Но поле всё ещё становится пустым при сохранении.
По поводу skipOnEmpty. Я пробовал делать так:
Код: Выделить всё
[['main_image'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg, jpeg'],
The difficult I’ll do right now. The impossible will take a little while.
- PartyPoison
- Сообщения: 69
- Зарегистрирован: 2017.04.27, 11:04
Re: Yii2. Пустое поле загрузки файла при редактировании.
Используйте сценарии, при update включаете сценарий в котором skipOnEmptye => true и нет requiredJust_Skiv писал(а): ↑2017.05.26, 11:22 Ну, я считал, что это нормальная ситуация - когда картинка обязательна для загрузки, но когда она уже загружена, то поле перестаёт быть обязательным (ведь оно уже заполнено). Да даже и не в обязательности проблема. Я могу сделать его необязательным, это не критично. Критично то, что оно становится пустым после редактирования.
По поводу skipOnEmpty. Я пробовал делать так:Но поле всё ещё становится пустым при сохранении.Код: Выделить всё
[['main_image'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg, jpeg'],
Re: Yii2. Пустое поле загрузки файла при редактировании.
А почему оно не работает (очищает поле) даже когда skipOnEmptye => true для всех случаев (не только для update)? Мне вот это скорее интересно. Про сценарии спасибо, не подумал о них. Действительно, будет удобно здесь их использовать.PartyPoison писал(а): ↑2017.05.26, 13:29 Используйте сценарии, при update включаете сценарий в котором skipOnEmptye => true и нет required
The difficult I’ll do right now. The impossible will take a little while.
Re: Yii2. Пустое поле загрузки файла при редактировании.
Ну я в принципе валидацию формы выношу в отдельную модель всегда, из ActiveRecord, и потом проверяю - надо менять, не надо.
- PartyPoison
- Сообщения: 69
- Зарегистрирован: 2017.04.27, 11:04
Re: Yii2. Пустое поле загрузки файла при редактировании.
Ну потому что в при сохранении в модель приходит так или иначе какое то значение и если оно пустое то собственно и в базе оно обновится, вообще в работе с изображениями много костылей, я например решал данный вопрос сохранением в переменную информации об изображении до обновления, после проверял пришло ли пустое изображение присваивая при этом модели то что хранится в переменную, но это не самое элегантное решение так как при условии что изображение нужно убрать выходит что этого сделать нельзя. Придется что то думать.Just_Skiv писал(а): ↑2017.05.26, 13:37А почему оно не работает (очищает поле) даже когда skipOnEmptye => true для всех случаев (не только для update)? Мне вот это скорее интересно. Про сценарии спасибо, не подумал о них. Действительно, будет удобно здесь их использовать.PartyPoison писал(а): ↑2017.05.26, 13:29 Используйте сценарии, при update включаете сценарий в котором skipOnEmptye => true и нет required
p.s Можно сделать более сложную структуру с хранением данных в бд ключами и прочим, так проблема решается.
Re: Yii2. Пустое поле загрузки файла при редактировании.
Я в итоге примерно также поступил.PartyPoison писал(а): ↑2017.05.26, 15:03 ...
я например решал данный вопрос сохранением в переменную информации об изображении до обновления, после проверял пришло ли пустое изображение присваивая при этом модели то что хранится в переменную
...
The difficult I’ll do right now. The impossible will take a little while.