@Gildars

Как загрузить файл на сервер используя фреймворк Phalcon?

Валидатор формы выдает ошибку "Field img must not be empty". var_dump() показывает что массив $_FILES пустой.

Views

{{ content() }}
{{ form('', 'method':'post') }}
{{ form.render('name') }}
{{ form.render('description') }}
<span class="base f-12">Навык оружия</span>
{{ form.render('skill') }}
<label class="base f-12">Уровень оружия</label>
{{ form.render('lvl') }}
<label class="base f-12">Тип оружия</label>
{{ form.render('type') }}
{{ form.render('attack') }}
{{ form.render('price') }}
{{ form.render('strength') }}
{{ form.render('criticalChance') }}
{{ form.render('criticalDamage') }}
{{ form.render('img') }}
{{ form.render('submit') }}
{{ end_form() }}
<small class="base">* - обязательные поля</small>


Form

$img = new File('img');
        $img->addValidator (new FileValidator(
           [
                'maxSize' => '2M',
                'messageSize' => ':максимальный размер изображения (:max)',
                'allowedTypes' => ['image/jpeg', 'image/png'],
                'messageType' => 'Тип изображения должен быть :types',
                'maxResolution' => '100x100',
                'messageMaxResolution' => 'Максимальное разрешение изображения  :field  :max'
            ]

        ));
        $this->add($img);


Controller

public function addWeaponAction() {
        $this->elements->setTitle('Добавить оружие');
        $form = new TradeAddWeapon();
            if (!$form->isValid($this->request->getPost())) {
                foreach ($form->getMessages() as $message) {
                    $this->flash->error($message);
                }
            }else {
                    if ($this->request->hasFiles() == true) {
                        $baseLocation = __DIR__ . 'public/img/items/weapon/';
                        foreach ($this->request->getUploadedFiles('img') as $file) {
                            $file->moveTo($baseLocation . $file->getName());
                            $item = new ItemsWeapon();
                            $item->name = $this->request->getPost('name', 'string');
                            $item->description = $this->request->getPost('description', 'string');
                            $item->lvl = $this->request->getPost('lvl', 'int');
                            $item->attack = $this->request->getPost('attack', 'int');
                            $item->type = $this->request->getPost('type', 'int');
                            $item->strength = $this->request->getPost('strength', 'int');
                            $item->price = $this->request->getPost('price', 'int');
                            $item->skill = $this->request->getPost('skill', 'string');
                            $item->critical_chance = $this->request->getPost('criticalChance', 'int');
                            $item->critical_damage = $this->request->getPost('criticalDamage', 'int');
                            $item->str = $this->request->getPost('str', 'int');
                            $item->dex = $this->request->getPost('dex', 'int');
                            $item->sta = $this->request->getPost('sta', 'int');
                            $item->int = $this->request->getPost('int', 'int');
                            $item->path_img = $baseLocation . $file->getName();
                            if ($item->save() == false) {
                                foreach ($item->getMessages() as $message) {
                                    $this->flash->error((string)$message);
                                }
                            } else {
                                $this->flash->success('Предмет успешно добавлен');
                            }
                        }

                    }

            }
        $this->view->form = $form;
        }
  • Вопрос задан
  • 757 просмотров
Решения вопроса 1
Akdmeh
@Akdmeh
PHP, Yii2, Music
Не знаком с Phalcon, но все же...
Вы не забыли добавить в тег формы multipart/form-data ? https://ru.wikipedia.org/wiki/Multipart/form-data
Нужно добавить к тэгу формы атрибут enctype="multipart/form-data". Просто это популярная ошибка. Сам ее допускал несколько раз, и готов был рвать волосы на голове...
https://webref.ru/html/form/enctype вот тут еще информация
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы