Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

rubenochoa's avatar

Using Mail:send

I am using stripe for payments and Mail for sending mail

 Mail::send(
                'shop.order_confirmation',
                ['user' => $user, 'code' => $code],
                function($message) use ($user){
                    $message->to($user->email);
                    $message->from("[email protected]");
                    $message->subject(Auth::user()->name , "Your order confirmation");
                    $message->bcc("[email protected]");
                }
            );

at ProductController:

<?php

namespace App\Http\Controllers;

use App\Cart;
use App\Product;
use App\Order;
use Illuminate\Http\Request;

use App\Http\Requests;
use Session;
use Auth;
use Stripe\Charge;
use Stripe\Stripe;
use Mail;

class ProductController extends Controller
{
    public function getIndex()
    {
        $products = Product::all();
        return view('shop.index', ['products' => $products]);
    }

    public function getAddToCart(Request $request, $id)
    {
        $product = Product::find($id);
        $oldCart = Session::has('cart') ? Session::get('cart') : null;
        $cart = new Cart($oldCart);
        $cart->add($product, $product->id);

        $request->session()->put('cart', $cart);
        return redirect()->route('product.index');
    }

    public function getCart()
    {
        if (!Session::has('cart')) {
            return view('shop.shopping-cart');
        }
        $oldCart = Session::get('cart');
        $cart = new Cart($oldCart);
        return view('shop.shopping-cart', ['products' => $cart->items, 'totalPrice' => $cart->totalPrice]);
    }

    public function getCheckout()
    {
        if (!Session::has('cart')) {
            return view('shop.shopping-cart');
        }
        $oldCart = Session::get('cart');
        $cart = new Cart($oldCart);
        $total = $cart->totalPrice;
        return view('shop.checkout', ['total' => $total]);
    }

    public function getReduceByOne($id){
        $oldCart = Session::has('cart') ? Session::get('cart') : null;
        $cart = new Cart($oldCart);
        $cart->reduceByOne($id);
        if (count($cart->items) > 0){
            Session::put('cart', $cart);
        } else{
            Session::forget('cart');
        } 
        return redirect()->route('product.shoppingCart');
    }

    public function getRemoveItem($id){
        $oldCart = Session::has('cart') ? Session::get('cart') : null;
        $cart = new Cart($oldCart);
        $cart->removeItem($id);
        if (count($cart->items) > 0){
            Session::put('cart', $cart);
        } else{
            Session::forget('cart');
        }       
        return redirect()->route('product.shoppingCart');
    }
  

    public function postCheckout(Request $request)
    {
        if (!Session::has('cart')) {
            return redirect()->route('shop.shoppingCart');
        }
        $oldCart = Session::get('cart');
        $cart = new Cart($oldCart);

        Stripe::setApiKey('');
        try {
            $charge = Charge::create(array(
                "amount" => $cart->totalPrice * 100,
                "currency" => "usd",
                "source" => 'tok_mastercard', // obtained with Stripe.js
                "description" => "Test Charge"
            ));
            $order = new Order();
            $order->cart = serialize($cart);
            $order->address = $request->input('address');
            $order->name = $request->input('name');
            $order->surname = $request->input('surname');
            $order->city = $request->input('city');
            $order->zip = $request->input('zip');
            $order->phone = $request->input('phone');

            $order->payment_id = $charge->id;

            Auth::user()->orders()->save($order);
            
            Mail::send(
                'shop.order_confirmation',
                ['user' => $user, 'code' => $code],
                function($message) use ($user){
                    $message->to($user->email);
                    $message->from("[email protected]");
                    $message->subject(Auth::user()->name , "Your order confirmation");
                    $message->bcc("[email protected]");
                }
            );
            

        } catch (\Exception $e) {
            return redirect()->route('checkout')->with('error', $e->getMessage());
        }

        Session::forget('cart');
        return redirect()->route('product.index')->with('success', 'Successfully purchased products!');
    }
    
}

The issue is that en error appear saying: "Undefined variable: user"

I tried to use Auth::user()->name but it does not help.

Thank you one more time.

0 likes
2 replies
MichalOravec's avatar
Level 75

Before Mail::send put this

$user = Auth::user();

Mail::send('shop.order_confirmation', [
    'user' => $user, 'code' => $code
], function($message) use ($user) {
        $message->to($user->email);
        $message->from("[email protected]");
        $message->subject($user->name." Your order confirmation");
        $message->bcc("[email protected]");
    }
);

Please or to participate in this conversation.