laravel форма обратной связи

Laravel. Отправка письма из приложения

Форма обратной связи

Создаем контроллер FeedbackController :

Добавляем два маршрута в файл routes/web.php :

Создаем шаблон resources/views/feedback/index.blade.php :

1

Класс отправки почты

Эти три значения используются далее в файле конфигурации отправки почты config/mail.php :

Шаблон почтового сообщения

Еще нам потребуется шаблон для письма resources/views/email/feedback.blade.php :

Отправка почты в log-файл

Теперь отправленные письма будут записываться в log-файл, где их можно посмотреть:

2

И добавим еще один канал (channel) в файле конфигурации логов приложения config/logging.php :

Отправка через smtp-сервер

Отправлять будем через smtp-сервер Яндекса, для этого нужно получить пароль приложения здесь:

3

Файл вложения

Давайте добавим на форму еще одно поле для загрузки изображения и будем это изображение прикреплять к письму:

Мы сохраняем загруженное изображение в директорию storage/app/feedback и потом оттуда прикрепляем к письму. Смысла хранить изображение дальше нет, так что его можно удалить. Но сразу удалять нельзя — возникает ошибка, потому что файл удаляется до того, как будет прикреплен к письму. Видимо, нужно добавить обработчик события MessageSent (возникает после отправки) — и уже там удалить файл с диска.

Вместо заключения

Передать данные в шаблон можно через публичное свойство класса FeedbackMailer :

Чтобы изменить данные, прежде чем передать их шаблону, свойство должно быть объявлено как protected или private :

Метод withSwiftMessage() класса Mailable позволяет зарегистрировать анонимную функцию, которая будет вызываться экземпляром сообщения SwiftMailer перед отправкой сообщения. Это дает возможность кастомизировать сообщение перед тем как оно будет доставлено.

Источник

Laravel AJAX: создаём форму обратной связи

lazy placeholderДоброго времени суток!

Сегодняшняя статья является продолжением цикла публикаций, посвящённых созданию сайта на Laravel, в рамках которого мы подробно рассмотрим процесс разработки корпоративного многостраничного сайта на базе шаблона с контактной формой и возможностью ведения блога.

Т.е. то, чем занимаются большинство веб-студий, требуя за свои услуги от 1000$. Если же вы наберётесь терпения изучить весь курс, то сэкономите означенную сумму и время на объяснение деталей сторонним исполнителям ?

Поэтому не забываем подписываться на обновления проекта, чтобы быть в курсе новых статей.

Итак, напомню, что в одной из предыдущих статей мы рассмотрели создание правил роутинга и контроллеров Laravel для каждой отдельной страницы сайта, в которых будем размещать код для вывода данных на страницах в дальнейшем.

Сегодня же мы используем полученный опыт и приступим к созданию формы обратной связи, на примере которой я покажу вам, как реализовать популярную технологию AJAX в рамках Laravel framework.

Забегая наперёд, скажу, что саму отправку email через форму мы сегодня делать не будем, т.к. для обзора способов отправки email в Laravel запланирована отдельная публикация, а всего лишь подготовим всё необходимое для этого.

Итак, чем же мы сегодня конкретно займёмся?

Laravel AJAX форма — постановка задачи

Сказав, что сегодня мы будем делать обратную форму на Laravel, я немного слукавил, т.к. она у нас уже есть и доступна по url — laravel.portfolio/contact (я решил его немного поменять, поэтому в дальнейшем форма будет доступна по url laravel.portfolio/contacts).

Единственное, чего ей сейчас не хватает — это функциональности, т.е. непосредственно отправка письма не работает и при нажатии на кнопку «Отправить» фреймворк нам выдаёт ошибку.

Что же тогда мы будет творить, если самой отправкой письма заниматься будем в следующей статье?

Суть нашей сегодняшней работы будет заключаться в написании функции, которая будет вызываться при нажатии на кнопку «Отправить» и будет оправлять данные, введённые пользователем в поля формы, на сервер, а затем, при получении ответа с сервера будет выдавать уведомление об успешной или неуспешной отправке сообщения.

lazy placeholder

И ещё один нюанс — всё это будет происходить без перезагрузки страницы, т.е. с использованием технологии AJAX.

Можно было, конечно, обойтись и без этого, просто перезагружая страницу, но это слишком просто, скучно и несовременно.

К тому же, AJAX нам понадобится в дальнейшем при работе с Laravel, а при его реализации часто случаются неприятные сюрпризы (у меня их тоже было полно, когда я только начинал работать с этим фреймворком), поэтому я и решил рассмотреть все «подводные камни» сейчас, чтобы не отвлекаться на них потом.

О них мы сейчас и поговорим.

Особенности реализации AJAX в Laravel

AJAX-запросы, по сути, ничем не отличаются от обычных HTTP-запросов к серверу, т.е. они могут отправляться теми же методами (GET, POST, PUT, DELETE и т.д.) с теми же самыми заголовками (HEADERS).

По этим же причинам метод POST считается более безопасным для передачи конфиденциальных данных, т.к. параметры GET-запроса и их значения можно легко увидеть в браузере.

Исходя из этих соображений, при отправке email в Laravel с помощью AJAX мы будем пользоваться POST-запросом. И тут нас ждёт один неприятный сюрприз, т.к. по умолчанию все AJAX-запросы, отправляемые POST-методом, будут приводить к ошибке:

lazy placeholder

Что за чушь? Что ещё за VerifyCsrfToken.php, если мы к данному файлу непосредственно не обращаемся?

Если у вас возникли подобные вопросы, то ответы ждут вас в статье о Laravel CSRF.

После её прочтения вы сами поймёте, что нужно сделать, чтобы AJAX POST запрос в Laravel заработал. Если же вопрос всё равно останется открытым, то ответ на него вы получите далее.

lazy placeholder

Реализация в Laravel AJAX контактной формы

Итак, нам нужно будет сделать следующее:

Ну, что такое AJAX и в чём заключается его суть, я думаю, нет смысла описывать, т.к. технология уже лет 10 как не инновационная ? Если вдруг вам нужны будут подробности — напишите об этом в комментариях.

AJAX контактная форма в Laravel — готовим HTML

Итак, что же конкретно мы будем делать?

На данный момент на сайте у нас уже есть контактная форма, которая отправляет POST-запрос на сервер скрипту contact.php. Загляните в файл с кодом контактной формы /resources/views/contact.blade.php, где это прописано:

Кстати, немного подумав, решил переименовать данный файл и соответствующую ссылку на страницу с контактной формой, так что в дальнейшем файл будет называться contacts.blade.php, чтобы было созвучно с новым url /contacts.

Как видите, в шаблоне, который мы используем для создания сайта, всё уже сделано до нас — и скрипт отправки письма, и валидация данных формы (проверка корректности ввода). Но мы от этого избавимся и изобретём собственный велосипед, чтобы было понятно, как он устроен ?

Кроме того, данные фичи есть не во всех щаблонах, поэтому нужно уметь реализовывать подобное самостоятельно.

Поэтому очищаем тэг формы от ненужных атрибутов. И, чтобы избавится от валидации данных формы, встроенной в шаблон, очистим поля формы от ненужных атрибутов. Стандартной Bootstrap валидации нам вполне хватит.

Ну, и для добавления реализации Laravel CSRF protection и для исключения ошибки проверки CSRF token, о которой мы говорили ранее, в нашу форму следует добавить следующее:

Или воспользоваться другими вариантами указания токена, которые были перечислены в статье о Laravel CSRF по ссылке выше.

В итоге наша форма примет следующий вид:

Ну, а для вывода переменных окружения в blade я воспользовался следующей конструкцией:

Как видите, я воспользовался функцией-хэлпером Laravel env(), которая в качестве аргумента принимает имя переменной окружения, а возвращает, следовательно, её значение. Вызывать её можно как в файлах шаблонизатора, так и из php-кода контроллеров и моделей.

Ну, и для визуального оформления сообщения об ошибке отправки письма с контактной формы я добавил стили для селектора #senderror в файлик /public/css/style.css следующим образом:

Только не нужно бездумно копипастить код. Первый блок свойств уже существует для селектора #sendmessage. Всё, что нужно, — это добавить эти свойства для #senderror, прописав его через запятую. Остальные два блока просто копируем.

Итак, на этом HTML часть контактной формы готова. Следующим этапом мы подготовим JS-код для передачи запроса и обработки его результатов без перезагрузки страницы.

Laravel AJAX контактная форма — JavaScript код

Поскольку AJAX — это JavaScript технология, то вся магия, как раз и будет происходить здесь. Под магией подразумевается отправка запроса и реакция при получении ответа от сервера.

В проекте мы пользуемся JavaScript библиотекой jQuery (многие называют её JS-фреймворком, кому как угодно), поэтому и код AJAX запроса будет с использованием jQuery конструкций. Сам же код будет следующим:

Пару слов о том, что же здесь написано. Функция отправки AJAX запроса будет работать только когда страница загрузится, о чём говорит первая строка кода.

Запрос мы будем отправлять при событии submit HTML формы, т.е. при её подтверждении, что видно на второй строчке кода.

На третьей строке происходит прерывание стандартного подтверждения отправки формы. Если его не прервать, то вместо нашего кода Laravel пытался бы отправить запрос на action формы, которого нет, и мы получали бы ошибку о несуществующем URL.

На пятой строке можно увидеть вызов специальной функции jQuery ajax, которая делает отправку и обработку AJAX запросов невероятно удобной и простой, лишая разработчиков необходимости вникать в премудрости отправки и обработки результатов XMLHttpRequest из чистого JavaScript-кода.

Шестая, седьмая и восьмая строки говорят о том, что запрос будет отправляться методом POST на URL /sendmail и в теле запроса в качестве параметров будут передаваться данные, введённые пользователем в поля HTML формы.

Дальнейший код описывает действие, которое должно произойти при получении ответа от сервера. Пока что я решил прописать только вывод текста ответа в консоль браузера. В дальнейшем же, когда отправка email будет реализована, мы заменим данную «заглушку» на что-то более осмысленное.

В завершение описания данного этапа скажу, что код выше необходимо вставить в самый конец нашего кастомного JS-файла /public/js/app.js. И неплохо будет почистить кэш браузера, иначе мы рискуем не увидеть результат выполнения.

Laravel AJAX — прописываем роуты

Итак, как вы могли заметить, в JS функции отправки AJAX запроса мы указали тип запроса и URL, на который он будет передан. Теперь самое время создать соответствующее правило Laravel routing для того, чтобы указать фреймворку как нужно обрабатывать данный запрос.

Для этого заходим в файл /routes/web.php и прописываем в его конце следующее правило:

Данный код говорит фреймворку, что при поступлении POST запроса на URL /sendmail следует вызвать метод контроллера Ajax\ContactController send().

Обработка Laravel AJAX запроса

Несмотря на то, что у нас уже есть контроллер ContactController, я решил для обработки AJAX запросов создать отдельный каталог с одноименным названием и заполнить его специальными одноимёнными контроллерами для обработки AJAX запросов на страницах сайта, т.к. считаю это архитектурное решение более правильным.

Если вы не разделяете мою точку зрения, можете создать метод send() в файле существующего контроллера /app/Http/Controllers/ContactController.php.

Я же воспользовался для создания нового контроллера уже знакомым алгоритмом.

Запускаем консоль и перемещаемся в каталог сайта:

Выполняем artisan команду для создания нового контроллера:

После успешного выполнения должна была создаться папка /app/Http/Controllers/Ajax с файлом нового контроллера внутри ContactController.php.

Создаём в нём новый метод send(), который в качестве входного параметра будет принимать экземпляр класса Request, у которого в качестве свойств будут доступны тело, заголовок и параметры запроса, обрабатываемого данным методом.

Внутри данного метода в дальнейшем как раз и будет располагаться код отправки email сообщения. Пока же ограничимся «заглушкой», которая будет выводить на экран параметры запроса, которыми в нашем случае являются данные полей HTML формы.

В результате, контроллер Ajax/ContactController будет содержать следующий код:

Проверка выполнения Laravel AJAX запроса

Ну, вот и всё. Все необходимые приготовления выполнены. Осталось только проверить правильность работы нашей реализации Laravel AJAX.

Для этого переходим на страницу с AJAX формой обратной связи, а также открываем в браузере панель с инструментами разработчика и переходим на вкладку Console, где мы увидим ответ от сервера на AJAX запрос.

Если вы всё сделали правильно, то в консоли должны будут отобразиться введённые в поля формы данные в виде параметров запроса.

Итак, вводим произвольные данные в нашу HTML форму и нажимаем на кнопку «Отправить». В консоли вы должны увидеть следующее:

lazy placeholder

Если вы увидели данный набор символов — поздравляю, вы всё сделали верно ? Не обращайте внимание на то, что AJAX ответ от сервера пришёл в таком неприглядном виде, главное — это положительный результат!

Увиденное — это результат выполнения отладочной функции Laravel dd(), которая на самом деле на выходе содержит много HTML кода, скрытого от глаза пользователя. При выводе же HTML кода в консоли браузера он не обрабатывается, и мы на экране видим «голый» HTML и JavaScript.

Если же хотите увидеть Laravel AJAX ответ сервера во всей красе, стоит лишь переместиться на вкладку инструментов разработчика «Network» и нажать на /sendmail, чтобы увидеть следующее:

lazy placeholder

Как видите, сервер вернул список значений всех полей HTML формы, а также вывел его в консоли, что и было прописано нами в коде.

А это значит, что Laravel успешно выполнил и обработал AJAX запрос, который был нами отправлен через форму обратной связи.

Теперь дело осталось за малым — в контроллере вместо «заглушки» прописать действия, которые будут производиться на сервере при обработке данного запроса, а в JavaScript скрипте прописать сценарии для фронтэнда сайта, выполняемые при успешном получении результатов обработки запроса.

Этим мы и займёмся в следующей статье, где рассмотрим способы отправки email в Laravel более детально. Поэтому подписывайтесь на обновления по ссылке в начале статьи, чтобы получить уведомление на почту о выходе нового материала.

На этом я сегодня с вами прощаюсь и напоминаю, что изменения кода, продемонстрированные в сегодняшней публикации, доступны в репозитории проекта в коммите под номером 5.

Пишите ваши отзывы в комментариях, предлагайте свои идеи функционала нашего будущего сайта, которые бы вы хотели увидеть и реализовать.

А также вступайте в наши сообщества в социальных сетях, где вы всегда можете побеседовать с единомышленниками и получить ответ на любой оффтопный вопрос.

P.S.: если вам нужен сайт либо необходимо внести правки на существующий, но для этого нет времени и желания, могу предложить свои услуги.

Более 5 лет опыта профессиональной разработки сайтов. Работа с PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular и другими технологиями web-разработки.

Опыт разработки проектов различного уровня: лендинги, корпоративные сайты, Интернет-магазины, CRM, порталы. В том числе поддержка и разработка HighLoad проектов. Присылайте ваши заявки на email cccpblogcom@gmail.com.

И с друзьями не забудьте поделиться ?

Источник

Создание и проверка форм

Формы — непременная часть любого вёб-приложения. Мы используем их для авторизации и регистрации нового пользователя, на странице обратной связи, при отправки комментария и для множества других задач. Однако их создание и последующая проверка может быть неприятным процессом — и здесь на сцену выходит Laravel, который даёт нам несколько аккуратных классов для интуитивно понятной работы с формами и их данными.

Создание форм в Laravel

Вы наверняка заметили некие вызовы PHP Input :: old () — о них мы поговорим чуть позже, а пока просто запомните, что они здесь есть.

Класс Form содержит множество методов для простого создания форм — вы можете ознакомиться с ними в документации.

Подделка межсайтовых запросов (CSRF )

Я не буду вдаваться в подробности о CSRF — Jeff Atwood написал очень наглядную статью о том, что это такое и как этого избежать.

Метод Form::token() создаёт случайную последовательность символов, сохраняет её в данных сессии (это значит, что вам нужно включить их поддержку в application/config/session.php ) и выводит её в виде скрытого поля формы. При обработке запроса от формы, использующей CSRF-ключ мы можем использовать встроенный фильтр csrf для проверки того, что никто не «поработал» над запросом и он действительно исходит от пользователя.

Вот как выглядит код фильтра (файл application/routes.php):

Мы можем настроить его как нам нужно, но для этой статьи нам вполне хватит стандартного обработчика.

Начнём писать наш POST—маршрут, который будет обрабатывать регистрацию (файл application/routes.php):

Вот и всё, что нам нужно для включения CSRF-фильтра — просто убедится, что он указан в списке before.

Проверка введённых данных

Теперь, когда мы удостоверились, что пришедшему запросу можно доверять, нам нужно проверить данные, которые ввёл в форму пользователь. Вернёмся к нашему марштуру register, добавим туда проверку, а затем я объясню, что к чему.

Несколько человек заметили, что проверка не должна выполняться в контроллере. Обычно лучше всего делать это в модели — моя следующая статья «Продвинутая проверка ввода в Laravel» описывает именно этот способ решения задачи.

Вот, что мы здесь делаем:

Последовательность действий, которые мы здесь выполняем, называют шаблоном «Post/Redirect/Get» (PRG) — это отличный способ предотвратить двойную отправку формы.

Теперь посмотрим на правила, которые мы определили выше.

required — обозначает, что поле должно быть заполнено — иными словами, оно должно иметь значение.

unique — здесь немного более сложный момент. Это правило принимает 3 параметра, 2 из которых можно опустить. Первый параметр — имя таблицы, в котором нужно проверять значение на уникальность; второй — имя поля в таблице, если оно не соответствует имени поля в форме (в этом случае его можно пропустить); третий и последний параметр — значение (id) для первичного ключа.

Предположим, что мы обновляем существующий профиль пользователя — мы точно так же хотим, чтобы его e-mail был уникальным, но если он решил не изменять свой адрес, то нам не стоит говорить, что введённый e-mail уже занят — им самим. Для этого мы и передаём ID пользователя — Laravel исключит соответствующую запись из проверки.

e-mail — проверяет, что введённое значение похоже на правильный e-mail адрес, но не проверяет его на существование.

min — устанавливает минимально допустимую длину значения данного поля.

Полный список доступных правил можно найти в документации.

Отображение ошибок

Поля ввода паролей изначально не имеют значения по умолчанию, но вы можете задать его явно используя массив атрибутов:

Сообщения будут показаны только в случае, когда определённое поле содержит ошибки.

Вы можете отформатировать сообщение в нужный HTML передав его во втором параметре:

Либо, если вы хотите отобразить первое сообщение об ошибке для любого поля, а не только для username:

Наконец, вы можете отобразить все возникшие ошибки:

Собственные правила и ошибки

Часто вам понадобится создавать собственные правила для проверки ввода. До Laravel 3 это делалось наследованием класса Validator и добавлением к нему методов. С поддержкой пакетов потребовалось более надёжное решение, чтобы не создавать множество подклассов. Laravel 3 позволяет регистрировать произвольные правила с помощью PHP Validator :: register () :

Использование нового правила:

Здесь нам потребовалось определить поле как обязательное ( «required» ). Крмое этого нам также нужно добавить сообщение об ошибке в файл application/language/en/validation.php:

Либо можно это сделать при создании экземпляра Validator, передав его в третьем параметре:

Вот и всё!

Итак, мы с вами создали форму, отправляющую POST-запрос на наш маршрут, где происходит проверка ввода контроллером — который, в свою очередь, при обнаружении ошибок отправляет клиента обратно с сохранением предыдущего ввода и выводом соответствующих сообщений.

Статистика: Символов — 10 958/9 228 без пробелов (7 147/6 081 без кода):, слов — 1 067

Источник

Laravel 6 contact form tutorial

Published Feb 08, 2020

Topic: Articles

Author: Harun

Make any list with single app!

Try once you must love it

Contact form is most often an important part of any website. If you are a new Laravel developer then this post will help you to learn a step by step process for how to make a contact us form and submit for sending an e-mail to your desired email address. To send e-mail from a contact form we need to know about how to send e-mail in Laravel framework. In Laravel framework, e-mail sending is really simple. We can send e-mail in various way with same e-mail API that Laravel provides. Before we start, I’ll recommend you to read a previous post on sending email laravel. Let’s make a contact form in using Laravel so that user can send an email by our website contact form.

Table of Content

Make routes

Let’s define 2 routes in web.php file in routes directory of Laravel project.

Create a contact form

Now make a contact.blade.php file in resources/views folder and do the contact form markup.

Make a controller for handle form request

Make a contact form handler controller via artisan command.

Mail Configuration

Set mail credentials on env

create an e-mail template for sending it on mail. Create a blade file name with email.blade.php in resources/views/emails

Test the contact form

Now browse http://example.com/contact-us and fill up the name, email, message and submit the form. If you set up everything correctly then you will get an e-mail into your mail address.

Conclusion

Thank you for reading this tutorial post with patience. I hope, this tutorial post will help you to make contact feedback form on your website. If this post is helpful to you then please share it with others.

Источник

Простой пример отправки формы в Laravel через AJAX jQuery

Сегодня мы рассмотрим, как отправить форму в Laravel, используя AJAX jQuery с одновременной проверкой данных. В данном руководстве объясняется процедура обработки формы через запрос AJAX jQuery и сохранение информации в таблице базы данных. Давайте сразу перейдем к отправке данных методом POST.

В нашем примере данные сохраняются в БД без перезагрузки страницы. В Laravel предусмотрено обновление страницы при отправке данных, – чтобы этого избежать, мы используем запрос AJAX.

57203 530107

Шаг 1: добавляем маршруты

Прежде всего, добавим два маршрута в файл routes/web.php :

Шаг 2: создаем модель и файл миграции

После выполнения приведенной ниже команды автоматически будут созданы файлы модели и миграции:

Модель формы « Контакты » находится в директории app ( app/Contact.php ), а файл миграции в нашем примере располагается в каталоге database/migrations/2019_09_02_161223_create_contacts_table.php.

Добавьте в файл миграции приведенный ниже код:

Шаг 3: создаем контроллер

Перейдем к созданию контроллера для обработки запроса на стороне сервера. В контроллер мы вставим два метода – один отвечает за отображение формы « Контакты », а второй – за сохранение введенных в нее данных в БД.

Выполните в командной строке следующую команду:

Шаг 4: создание Blade шаблона для формы запроса

Все готово к запуску в браузере – обработка данных из формы этим методом не требует обновления и перезагрузки страницы. Обращайтесь в комментарии в случае затруднений.

Пожалуйста, оставляйте свои отзывы по текущей теме статьи. Мы крайне благодарны вам за ваши комментарии, подписки, отклики, дизлайки, лайки!

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • laravel поиск без учета регистра
  • laravel отношения один к одному