Yii2. Пустое поле загрузки файла при редактировании.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Just_Skiv
Сообщения: 31
Зарегистрирован: 2011.08.12, 13:06
Контактная информация:

Yii2. Пустое поле загрузки файла при редактировании.

Сообщение Just_Skiv »

Ситуация такова. Имеется поле file, которое загружает файл и сохраняет имя файла в БД. Если я редактирую запись, в которой уже имеется загруженный ранее файл, но при этом оставляю поле file нетронутым (например, требуется изменить только заголовок), то соответствующее поле в БД становится пустым. Кроме того, если поле является обязательным для заполнения, то форма вообще отказывает отправляться, требуя загрузить новый файл. Как правильно поступать в такой ситуации?
The difficult I’ll do right now. The impossible will take a little while.
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Yii2. Пустое поле загрузки файла при редактировании.

Сообщение mkramer »

Обязательным такое поле делать не надо. Или делать условно обязательным - только для новых файлов. И проверять, был ли выбран файл или не был.
Аватара пользователя
Just_Skiv
Сообщения: 31
Зарегистрирован: 2011.08.12, 13:06
Контактная информация:

Re: Yii2. Пустое поле загрузки файла при редактировании.

Сообщение Just_Skiv »

mkramer писал(а): 2017.05.25, 20:57 Обязательным такое поле делать не надо. Или делать условно обязательным - только для новых файлов. И проверять, был ли выбран файл или не был.
Я могу придумать способы обойти эту проблему. Просто, я надеялся, что фреймворк предусматривает подобные случаи, а я просто не знаю такие механизмы. На сколько я помню, в первом yii было свойство skipOnEmpty, или как-то так. Теперь такой штуки либо нет, либо механизм её использования изменился, а я об этом не знаю.
The difficult I’ll do right now. The impossible will take a little while.
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Yii2. Пустое поле загрузки файла при редактировании.

Сообщение mkramer »

Но сочетать required со skipOnEmpty как минимум странно
Аватара пользователя
Just_Skiv
Сообщения: 31
Зарегистрирован: 2011.08.12, 13:06
Контактная информация:

Re: Yii2. Пустое поле загрузки файла при редактировании.

Сообщение Just_Skiv »

Ну, я считал, что это нормальная ситуация - когда картинка обязательна для загрузки, но когда она уже загружена, то поле перестаёт быть обязательным (ведь оно уже заполнено). Да даже и не в обязательности проблема. Я могу сделать его необязательным, это не критично. Критично то, что оно становится пустым после редактирования.

По поводу 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. Пустое поле загрузки файла при редактировании.

Сообщение PartyPoison »

Just_Skiv писал(а): 2017.05.26, 11:22 Ну, я считал, что это нормальная ситуация - когда картинка обязательна для загрузки, но когда она уже загружена, то поле перестаёт быть обязательным (ведь оно уже заполнено). Да даже и не в обязательности проблема. Я могу сделать его необязательным, это не критично. Критично то, что оно становится пустым после редактирования.

По поводу skipOnEmpty. Я пробовал делать так:

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

[['main_image'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg, jpeg'],
Но поле всё ещё становится пустым при сохранении.
Используйте сценарии, при update включаете сценарий в котором skipOnEmptye => true и нет required
Аватара пользователя
Just_Skiv
Сообщения: 31
Зарегистрирован: 2011.08.12, 13:06
Контактная информация:

Re: Yii2. Пустое поле загрузки файла при редактировании.

Сообщение Just_Skiv »

PartyPoison писал(а): 2017.05.26, 13:29 Используйте сценарии, при update включаете сценарий в котором skipOnEmptye => true и нет required
А почему оно не работает (очищает поле) даже когда skipOnEmptye => true для всех случаев (не только для update)? Мне вот это скорее интересно. Про сценарии спасибо, не подумал о них. Действительно, будет удобно здесь их использовать.
The difficult I’ll do right now. The impossible will take a little while.
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Yii2. Пустое поле загрузки файла при редактировании.

Сообщение mkramer »

Ну я в принципе валидацию формы выношу в отдельную модель всегда, из ActiveRecord, и потом проверяю - надо менять, не надо.
Аватара пользователя
PartyPoison
Сообщения: 69
Зарегистрирован: 2017.04.27, 11:04

Re: Yii2. Пустое поле загрузки файла при редактировании.

Сообщение PartyPoison »

Just_Skiv писал(а): 2017.05.26, 13:37
PartyPoison писал(а): 2017.05.26, 13:29 Используйте сценарии, при update включаете сценарий в котором skipOnEmptye => true и нет required
А почему оно не работает (очищает поле) даже когда skipOnEmptye => true для всех случаев (не только для update)? Мне вот это скорее интересно. Про сценарии спасибо, не подумал о них. Действительно, будет удобно здесь их использовать.
Ну потому что в при сохранении в модель приходит так или иначе какое то значение и если оно пустое то собственно и в базе оно обновится, вообще в работе с изображениями много костылей, я например решал данный вопрос сохранением в переменную информации об изображении до обновления, после проверял пришло ли пустое изображение присваивая при этом модели то что хранится в переменную, но это не самое элегантное решение так как при условии что изображение нужно убрать выходит что этого сделать нельзя. Придется что то думать.

p.s Можно сделать более сложную структуру с хранением данных в бд ключами и прочим, так проблема решается.
Аватара пользователя
Just_Skiv
Сообщения: 31
Зарегистрирован: 2011.08.12, 13:06
Контактная информация:

Re: Yii2. Пустое поле загрузки файла при редактировании.

Сообщение Just_Skiv »

PartyPoison писал(а): 2017.05.26, 15:03 ...
я например решал данный вопрос сохранением в переменную информации об изображении до обновления, после проверял пришло ли пустое изображение присваивая при этом модели то что хранится в переменную
...
Я в итоге примерно также поступил.
The difficult I’ll do right now. The impossible will take a little while.
Ответить