Загрузка файла формы OctoberCMS | Указан неверный аргумент для foreach () - PullRequest
0 голосов
/ 06 сентября 2018

Я довольно новичок в OctoberCMS & Laravel.Я настраивал контактную форму, все отлично работает, кроме добавления нескольких файловых вложений.У меня был поиск в Интернете, и я не смог найти решение, почему моя форма не будет отправлена.

Ошибка, о которой идет речь, - «неверный аргумент для foreach () в строке 26»

Строка 26 - это первый цикл foreach

Я прикрепил ниже разметку html формы, а также контроллер для формы.

Код PHP

<?php
namespace Bprint\Contact\Components;
use Cms\Classes\ComponentBase;
use Input;
use Mail;
class ContactForm extends ComponentBase{
    public function componentDetails(){
        return [
            'name' => 'Contact Form',
            'description' => 'Bprint Contact Form'
        ];
    }
    public function onSend(){
        $vars = ['fieldName' => Input::get('fieldName'), 'fieldCompany' => Input::get('fieldCompany'), 'fieldEmail' => Input::get('fieldEmail'), 'fieldUpload' => Input::file('fieldUpload'), 'fieldContent' => Input::get('fieldContent')];
        $attachments = [];
        foreach($vars['fieldUpload'] as $image) {
            $attachments[] = $image;
        }
        Mail::send('bprint.contact::mail.message', $vars, function($message) use ($attachments) {  
            foreach($attachments as $attachment) {
                $params = ['as' => $attachment->getFilename()/*, 'mime' => $mime*/];
                $message->attach($attachment->getLocalPath(), $params);
            }
            $message->to('REDACTED', 'BlueprintCMS');
            $message->subject('Blueprint Website | Contact Form"');
        });
    }
}

HTML-разметка формы

    <form data-request="onSend" data-request-loading="#loading" data-request-error="alert('There was an error sending your message. Please try again shortly, if error persits please email us at blueprint@outoftheblue.org.uk')" data-request-success="alert('Your message has been sent.')" class="bpsite-form floating-labels">
      <fieldset>
          <div class="icon">
                  <label class="bpsite-label" for="bpsiteName">Name</label>
                  <input name="fieldName" class="user" type="text" id="bpsite-name" required>
          </div>
          <div class="icon">
              <label class="bpsite-label" for="bpsite-company">Company</label>
              <input name="fieldCompany" class="company" type="text" id="bpsite-company">
          </div>
          <div class="icon">
              <label class="bpsite-label" for="bpsite-email">Email</label>
              <input name="fieldEmail" class="email" type="email" id="bpsite-email" required>
          </div>
          <input type="file" name="fieldUpload[]" multiple>
      </fieldset>
      <fieldset>
          <div class="icon">
              <label class="bpsite-label" for="bpsite-textarea"></label>
        <textarea name="fieldContent" class="message" id="bpsite-textarea" required></textarea>
          </div>
          <div>
              <button id="bpsite-button" style="display: none;" class="btn btn-primary form-btn" type="submit">Send</button>
              <label for="bpsite-button">
                <div class="box">
                      <span data-text="S">S</span>
                      <span data-text="E">E</span>
                      <span data-text="N">N</span>
                      <span data-text="D">D</span>
                  </div>
              </label>
        <div id="loading" style="display: none;">
          <div class="col-2 col-sm-2 col-md-2 col-lg-2 col-xl-2">
            <img class="img-fluid" src="{{ 'loader.gif'|media }}" alt="Loading..." />
          </div>
          <div class="col-10 col-sm-10 col-md-10 col-lg-10 col-xl-10">
            <div class="alert alert-info">
              <p class="body-text">Your message is being sent...</p>
            </div>
          </div>
        </div>
          </div>
      </fieldset>
    </form>

Заранее спасибо всем, кто может мне помочь!

С уважением, Джек

1 Ответ

0 голосов
/ 06 сентября 2018

Вы используете ajax Framework от OctoberCMS и хотите загрузить вложение файла с помощью этой формы, затем вам нужно добавить еще один атрибут data-request-files для элемента формы.

Ваш элемент формы будет выглядеть так:

<form data-request="onSend"
    data-request-files
    data-request-error="alert('There was an error sending your message. Please try again shortly, if error persits please email us at blueprint@outoftheblue.org.uk')"
    data-request-success="alert('Your message has been sent.')"
    class="bpsite-form floating-labels">

и он начнет работать.

...