在laravel邮件程序功能中访问变量的正确方法是什么

时间:2016-05-27 12:16:22

标签: php laravel

这是一个简单的问题。我想知道如何在以下邮件程序功能中访问变量。 我将从数据库中获取这些值并在邮件程序功能中使用它。 当我尝试直接将这些变量访问到邮件程序功能时,它会说Undefined variable: to_email

对于以下代码,未识别变量并引发错误。

$to_email = 'to_email@gmail.com';  
$to_firstname = 'Arun';  
$to_lastname = 'Singh';  

Mail::queue('/emails/test', array('firstname'=>'arun'), function($message){  
    $message->to($to_email, $to_firstname.' '.$to_lastname)->subject('Welcome '.$to_firstname.' to XYZ!');
});

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

匿名函数也可以通过在use()语法use($foo, $bar, $baz, ...)中传递来从父作用域继承变量,在你的情况下它将是:

$to_email = 'to_email@gmail.com';  
$to_firstname = 'Arun';  
$to_lastname = 'Singh';  

Mail::queue('/emails/test', array('firstname'=>'arun'), function($message) use ($to_email, $to_firstname, $to_lastname) {  
    $message->to($to_email, $to_firstname.' '.$to_lastname)->subject('Welcome '.$to_firstname.' to XYZ!');
});

答案 1 :(得分:1)

操作你需要将变量纳入范围 function($message)使用use()回调。

$to_email = 'to_email@gmail.com';  
$to_firstname = 'Arun';  
$to_lastname = 'Singh';  

Mail::queue('/emails/test', array('firstname'=>'arun'), 
      function($message) use ( $to_email, $to_firstname, $to_lastname ){  
           $message->to($to_email, $to_firstname.' '.$to_lastname)
                   ->subject('Welcome '.$to_firstname.' to XYZ!');
});

或者你也可以将这些变量设置为数组(如果适用),然后仅引用邮件功能中的数组变量。

$new_array = [
    $to_email => 'to_email@gmail.com',  
    $to_firstname => 'Arun',  
    $to_lastname => 'Singh'
];

Mail::queue('/emails/test', array('firstname'=>'arun'), 
      function($message) use ( $new_array ){  
           $message->to( $new_array["to_email"],
                         $new_array["to_firstname"].' '.$new_array["to_lastname"]
                       );
           $message->subject('Welcome '.$new_array["to_firstname"].' to XYZ!');
}); 

对于您的特定问题,这可能会有些过分,但如果您要通过大型数据集可能会更容易,因为您提到您将从数据库中获取这些值。