1

ループを実行するforeach()と、現在の配列要素の値$recipientが行に定義されていません->to($recipient)。どうしてこれなの?

PHPコード(エラーをスローします)

foreach($recipients as $recipient) {
    Mail::send('emails.invite', $data, function($m){
        $m
            ->from('welcome@website.com', Auth::user()->name)
            ->to($recipient)
            ->subject('Auth::user()->name has invited you!');
    });
}

エラー

Notice: Undefined variable: recipient

PHPコード(エラーなし)

foreach($recipients as $recipient) {
    echo $recipient;
}
4

2 に答える 2

3

useあなたはキーワードを逃しました。コードを次のように変更します:

foreach($recipients as $recipient) {
    Mail::send('emails.shareListing', $data, function($m) use($recipient) {
        $m
            ->from('share@asd.com', Auth::user()->name)
            ->to($recipient)
            ->subject('Auth::user()->name has shared a listing with you!');
    });
}

このドキュメント、特に3番目の例を参照してください。引用:

クロージャは、親スコープから変数を継承する場合もあります。このような変数はすべて、関数ヘッダーで宣言する必要があります。

于 2013-03-25T00:39:53.073 に答える
1

これは、関数のスコープ内にいるためです。

ここでPEARパッケージを使用していると仮定すると、関数を渡す理由がまったくわかりません:http: //pear.php.net/manual/en/package.mail.mail.send.php

これを行うつもりなら、useキーワードを使用して変数を関数スコープに渡すことができます。

function($m) use($recipient) {
于 2013-03-25T00:41:01.400 に答える