27. Como crear un formulario de contacto
En este capítulo de Laravel, aprenderás cómo crear un formulario de contacto para tu sitio web utilizando Laravel y enviar mensajes a través de correo electrónico. Cubriremos los pasos necesarios para crear un formulario de contacto que sea seguro y fácil de usar, incluyendo la validación de formularios y la prevención de ataques de spam. Aprenderás cómo enviar los datos del formulario a través de correo electrónico utilizando el servicio de correo electrónico de Laravel. Al final de este capítulo, tendrás todos los conocimientos necesarios para crear un formulario de contacto eficaz y personalizado para tu sitio web Laravel.
7 comentarios
Inicia sesión para comentar
Comentarios:
-
Adrian Linares hace 1 semana
Victor gracias por compartir el contenido y excelente tus explicaciones. Ahora tengo una duda, como validas en un form si los datos son correctos? Ej. Evitar que el usuario agregue como mail example@example.com o en name agregue XDSESS? Será con expresiones regulares o Laravel tiene alguna manera de implementar esto. Gracias por tu respuesta. Saludos, desde Arg.
-
Jonathan Jv hace 5 meses
Una pregunta, veo que usas session() he trabajado antes con PHP puro y es mi primera vez en laravel, este método “session()” es lo mismo que declarar $_SESSION? quiero decir, ese método lo puedo usar para manejar el inicio de sesión de un usuario por ejemplo?
-
Jesus Parra hace 1 año
excelente.
-
Walter hace 2 años
? Cuarta Parte
? Validamos la información que se está enviando desde el formulario
Nos centramos en el método store del controlador:
$request->validate([ 'name' => 'required', 'correo' => 'required|email', 'mensaje' => 'required' ]);
Nos vamos a la vista index.blade.php para mostrar los mensajes de error:
@error('name') <p><strong>{{ $message }}</strong></p> @enderror
Hacemos lo mismo para correo y mensaje.
Por último retornar a la vista con un mensaje de correo enviado, entonces desde el controlador cambiamos el return y enviamos un mensaje de sesión:
return redirect()->route('contactanos.index')->with('info', 'Mensaje enviado');
with crea el mensaje de sesión.
En la vista mostramos un alerta cuando haya un mensaje de sesión:
@if (session('info')) <script> alert("{{ session('info') }}") </script> @endif
-
Walter hace 2 años
? Tercera Parte
? Rescatamos el contenido del formulario para mostrarla en el correo que se envía.
Si agregamos una propiedad en ContactanosMailable
public $contacto = "Esta es la información de contacto";
Cualquier propiedad que incluyamos en esta clase va a poder ser accedida desde el correo electrónico.
Entonces si vamos a la vista contactanos.blade.php podemos imprimir esa propiedad:
<p>{{ $contacto }}</p>
La forma que tenemos de pasar información a nuestro correo es la siguiente: Nos centramos en el controlador ContactanosController y en el método store recuperamos la información que se está mandando desde el formulario a través del objeto Request $request, cuando instanciamos la clase ContactosMailable le pasamos esa información al constructor $request->all().
Ahora recibimos esa información en el constructor de ContactanosMailable a través de $contacto:
public function __construct($contacto) { $this->contacto = $contacto; }
En la vista entonces ahora escribimos:
<p><strong>Nombre: </strong> {{ $contacto['nombre'] }}</p> <p><strong>Correo: </strong> {{ $contacto['correo'] }}</p> <p><strong>Mensaje: </strong> {{ $contacto['mensaje'] }}</p>
-
Walter hace 2 años
? Segunda Parte
? Creamos la vista index.blade.php en resources\views\contactanos\
@extends('layouts.plantilla') @section('title', 'Contáctanos') @section('content') <h1>Déjanos un mensaje</h1> <form action="{{ route('contactanos.store') }}" method="POST"> @csrf <label> Nombre: <br> <input type="text" name="name"> </label> <br> <label> Correo: <br> <input type="mail" name="correo"> </label> <br> <label> Mensaje: <br> <textarea name="mensaje" rows="4" ></textarea> </label> <br> <button type="submit">Enviar mensaje</button> </form> @endsection
? Creamos la ruta encargada de procesar lo que le enviamos desde el formulario:
Route::post('contactanos', [ContactanosController::class, 'store']) ->name('contactanos.store');
-
Walter hace 2 años
? Primera Parte
? Agregamos un enlace al menú de navegación en layouts/partials/header.blade.php
<li> <a href="{{ route('contactanos.index') }}" class="{{ request()->routeIs('contactanos.index') ? 'active' : '' }}" >Contáctanos</a> </li>
? Creamos un controlador para administrar la ruta:
php artisan make:controller ContactanosController
Le agregamos los métodos index() para mostrar un formulario y store() para procesar el formulario y enviar el correo electrónico:
use App\Mail\ContactanosMailable; use Illuminate\Support\Facades\Mail; public function index() { return view('contactanos.index'); } public function store(Request $request) { $correo = new ContactanosMailable($request->all()); Mail::to('victor.aranaf92@gmail.com')->send($correo); return "Mensaje enviado."; }
? Configuramos la ruta en web.php:
use App\Http\Controllers\ContactanosController; Route::get('contactanos', [ContactanosController::class, 'index']) ->name('contactanos.index');