РЕШЕНО. FormLister, Profile, загрузка изображений

Как всегда, ошибка скорее всего моя, но бьюсь 2 дня, результата нет. Перехожу с webloginPE на FormLister, возникла проблема:
Вот что имеем (практически из примера взято):


[!FormLister?
&formid=`avatar`
&controller=`Profile`
&defaults=`{"photo":""}`
&keepDefaults=`photo`
&attachments=`userpic`
&exitTo=`9`
&rules=`{
"fullname":{
	"required":"Обязательно введите имя"
}
}`
&fileRules=`{
"userpic":{
	"optional":"Не удалось загрузить файл",
	"maxSize" : {
		"params": 3072,
		"message": "Размер файла не должен превышать 3 мб"
	},
	"images": "Разрешены только картинки"
}
}`
&allowedFields=`fullname,photo`
&prepareProcess=`userPhoto`
&formTpl=`@CODE:
	<div class="d-flex justify-content-center mb-4">
		<form method="post" enctype="multipart/form-data">
			<input type="hidden" name="formid" value="avatar">
			<div class="profile-image-outer-container">
				<div class="profile-image-inner-container bg-color-primary">
					<img src="[+user.photo+]">
					<span class="profile-image-button bg-color-dark">
						<i class="fas fa-camera text-light"></i>
					</span>
				</div>
				<input type="text" class="form-control" id="fullname" placeholder="Имя" name="fullname" value="[+fullname.value+]">
				[+fullname.error+]
				<input type="file" name="userpic" class="profile-image-input2">
			</div>
			[+userpic.error+]
			[+form.messages+]						
			<button type="submit">Отправить</button>
		</form>
	</div>	
	`
&messagesOuterTpl=`@CODE:<div class="alert alert-danger" role="alert">[+messages+]</div>`
&errorTpl=`@CODE:<span class="help-block">[+message+]</span>`
&errorClass=` has-error`
&requiredClass=` has-warning`
!]	


Так же имеется prepare сниппет userPhoto 1в1 как из примера.
Что получаем:
— форма отправляется (для теста добавил туда fullname — всё отлично сохраняется)
— userPhoto вызывается
НО:
— не проходит ни какая валидация картинки, не на размер, не на тип (фото). Т.е. грузится любой файл и пишет — что «Данные успешно сохранены»
— в userPhoto не работает

$files = $FormLister->getFormData('files');
// добавил для отладки - пишется пустой массив Array(), т.е ни чего нет
file_put_contents('test.txt', print_r($files, true));

хотя если посмотреть массив $_FILES там же

file_put_contents('test.txt', print_r($_FILES, true));
// получаем это. Т.е. массив с файлами есть
Array
(
    [userpic] => Array
        (
            [name] => Без названия.png
            [type] => image/png
            [tmp_name] => /var/www/data/mod-tmp/phpch2BdA
            [error] => 0
            [size] => 1885844
        )

)

Я бы в принципе всё оставил и работал в prepare напрямую с $_FILES, но мне нужна валидация, да и если в примере всё работает, должно же и у меня…

Буду признателен за помощь.

Evolution 1.4.10, PHP 5.6.40

11 комментариев

avatar
Помог откат на версию FL до 1.8.6 — там всё работает.
Начиная с оф версии 1.9.0 видимо, логика поменялась, можно пояснить, кто сталкивался, как работать на последних версиях?
Спасибо.
avatar
Так же имеется prepare сниппет userPhoto 1в1 как из примера
о каком примере речь? ссылку или код
avatar
Из этого поста. Сам сниппет prepare не играет роли. С FL 1.9 поменялась логика. Где и как пока не понятно. Как и говорил на 1.8.6 работает полностью все примеры из того поста.
avatar
Я обновлял сайт на 1.4.10, FL 1.9.2 и тоже была проблема, помог Pathologic — попробуйте в сниппет добавить такую первую строку
$FormLister->setFiles($FormLister->filesToArray($_FILES, ['userpic']));

т.е. должно быть так
<?php
$FormLister->setFiles($FormLister->filesToArray($_FILES, ['userpic']));
//получаем массив с загруженными файлами
$files = $FormLister->getFormData('files');
...дальше без изменений
avatar
Спасибо, это помогло. Но не работает при этом fileRules (разрешена загрузка любых типов файлов).
avatar
этого не знаю, после обновления именно это не проверял((
avatar
Проверил — действительно, в контроллере Content валидация типа файлов срабатывает, а в контроллере Profile — нет. В контроллере Register у меня загрузка картинок сейчас не используется, проверить не могу. Может автор что подскажет…
avatar
Сдвинулось, спасибо. Автору отписался.
avatar
Не забудьте потом поделиться))
avatar
Автор отписался. Сейчас всё должно работать как надо на последних версиях! Но проверить у меня пока нет возможности(
avatar
подтверждаю, в 1.10.3 заработало
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.