htmlspecialchars () ожидает, что параметр 1 будет строкой, когда я попытаюсь отправить письмо в Laravel - PullRequest
0 голосов
/ 06 июня 2019

Я новичок в Laravel.Я создаю функцию для контактной формы.

У меня есть этот код:

public function sendContactForm($request)
    {
        $this->validate($request, [
            'name' => 'required|string',
            'topic' => 'required|string',
            'email' => 'required|email',
            'message' => 'required|string',
            'captcha' => 'required|captcha',
            'acceptReg' => 'required|integer',
        ]);
        $adminEmail = $this->frontendRepository->getSystemAdminEmail();

        $title = $request->input('topic');
        $txt = nl2br($request->input('message'));
        $userName = $request->input('name');
        $email = $request->input('email');
        $ip = $request->getClientIp();
        $dateTime = date('Y-m-d H:i:s');

        $mailTitle = "Masz wiadomość ze strony". env('APP_NAME')."<br/>";
        $message = "
        <b>Dane wiadomości:</b> $dateTime [$ip]<br/>
        <b>Tytuł wiadomości:</b> $title<br/>
        <b>Imię:</b> $userName<br/>
        <b>Adres email:</b> $email<br/>
        <b>Wiadomość:</b> $txt<br/>";

        Mail::to($adminEmail)->send(new ContactMail($message, $mailTitle, $email, $adminEmail));

        die('mail sent!');

    }

ContactMail.php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class ContactMail extends Mailable
{
    use Queueable, SerializesModels;

    public $message;
    public $title;
    public $sender;
    public $adminMail;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(string $message, string $title, string $sender, string $adminMail)
    {
        $this->message = $message;
        $this->title = $title;
        $this->sender = $sender;
        $this->adminMail = $adminMail;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
{
    return $this->subject($this->title)
            ->from($this->sender)
            ->to($this->adminMail)
            ->replyTo($this->sender)
            ->view('mail.contactform', ['message' => $this->message]);
}

Моя контактная форма.blade.php:

@section('content')
    {{ $message  }}
@endsection

Когда я запускаю свой скрипт, у меня появляется ошибка:

htmlspecialchars () ожидает, что параметр 1 будет строкой, заданным объектом (View:> / var / www / project / resources / views/mail/contactform.blade.php)

Как я могу его починить?

1 Ответ

1 голос
/ 06 июня 2019

build() метод вашего Mailable класса необходим для настройки вашего почтового объекта и возврата себя.Поэтому удалите ->send(..) call в конце цепочки вызовов:

public function build()
{
    return $this->subject($this->title)
            ->from($this->sender)
            ->to($this->adminMail)
            ->replyTo($this->sender)
            ->view('mail.contactform');
}

EDIT:

htmlspecialchars () ожидает, что параметр 1 будет строкой,заданный объект (Просмотр:> /var/www/project/resources/views/mail/contactform.blade.php)

Проблема заключается в файле почтового шаблона contactform.blade.php - вы не можетеиспользуйте имя переменной $message в вашем классе Mailable, потому что Laravel использует его для передачи вашего Mailable объекта в шаблон (поэтому в вашем шаблоне $message содержит ссылку на объект, а не на строку сообщения).Таким образом, вы можете думать об этом как о зарезервированном фреймворком.

Чтобы исправить это, переименуйте ваше поле $message во что-то другое, например, $content (или $text, $body и т. Д.) как в вашем ContactMail классе, так и contactform.blade.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...