【问题标题】:Locale Get Ignored When Sending Mail with Queue使用队列发送邮件时忽略区域设置
【发布时间】:2021-05-06 07:23:18
【问题描述】:

我正在寻找答案。 Laravel 框架 5.5.44 我有一个队列,每当有人在我的网站上下新订单时都会发送电子邮件。我使用事件和侦听器来完成此操作。 我的队列成功发送了电子邮件,但我的区域设置代码不起作用。以下是我的代码:

NewOrderListener.php

 public function handle($event)
    {
        

        try {
            dump('new order registered (listernerrr)');

            // dump($event->order);

            $email = $event->order['email'];
            // $logo_settings_details = Settings::get_logo_settings_details();
            // // dump($logo_settings_details);
            // $event->order->prepend('logo_settings_details', DB::table('gr_logo_settings')->get());
            // array_push($event->order, DB::table('gr_logo_settings')->get());
            $event->order['logo_settings_details'] = DB::table('gr_logo_settings')->get();
            // $data = [
            //     'logo_settings_details' => DB::table('gr_logo_settings')->get(),
            // ];
            // dd($data);
            $get_images = DB::table('gr_no_images')->select('banner_image','restaurant_store_image','restaurant_item_image','product_image','logo_image','landing_image','shop_logo_image','category_image')->first();
            if(empty($get_images) === false)
            { 
                $no_item = $get_images->restaurant_item_image;
                $event->order['no_item'] = $no_item;

            }

            
            $this->general_setting = DB::table('gr_general_setting')->get();
            if(count($this->general_setting) > 0){
                foreach($this->general_setting as $s){
                    $event->order['FOOTERNAME'] = $s->footer_text;  
                }
            }
            else {
                 $event->order['FOOTERNAME'] = 'ePickMeUp';
            }
            

            // dd($event->order);

            Mail::send('email.order_mail_customer', $event->order, function($message) use($email)
            {
                dump($email);
                // $sub_data = (Lang::has(Session::get('front_lang_file').'.FRONT_ORDER_SUCCSESS')) ? trans(Session::get('front_lang_file').'.FRONT_ORDER_SUCCSESS') : trans($this->FRONT_LANGUAGE.'.FRONT_ORDER_SUCCSESS');

                // dump($sub_data);

                $message->to('googleadmin@gmail.com')->subject('SUCCESSFUL ORDER ????');
                dump('email sent');

            });

        } catch (\Exception $e) {
            // Log Error
            // Log::error($e->getMessage());

            // Sent Error To Slack

            // Dump Error
            dump($e->getMessage());
        }

    }

order_mail_customer.blade.php

    <td style="border-top: 5px solid #f7d501;">
        <table style="padding:10px;width:100%;">
            <tr>
                <td align="center">
                    @php $path = url('').'/public/images/noimage/default_image_logo.jpg'; @endphp
                    @if(count($logo_settings_details) > 0)
                    @php
                        foreach($logo_settings_details as $logo_set_val){ }
                    @endphp
                    @if($logo_set_val->admin_logo != '')
                        @php $filename = public_path('images/logo/').$logo_set_val->admin_logo; @endphp 
                        @if(file_exists($filename))
                        @php $path = url('').'/public/images/logo/'.$logo_set_val->admin_logo; @endphp
                        @endif
                    @endif                          
                    @endif
                    <img src="{{$path}}" alt="@lang(Session::get('front_lang_file').'.ADMIN_LOGO')" class="img-responsive logo"  width="100">
                </td>                       
            </tr>
        </table>
        </td>
    </tr>
    
    @if($self_pickup==1)
        <tr>
            <td>
                <table style="width:100%;background:url('{{url('public/images/order_image.jpg')}}')no-repeat; padding:56px 20px;">
                    <tr>
                        <td colspan="1" style="text-align:center; font-family:cursive; font-size:35px; padding-bottom: 20px;  color: #fff;">
                            @lang(Session::get('front_lang_file').'.FRONT_THANK_ORDER')
                        </td>                           
                    </tr>
                    <tr>
                        <td style="text-align:center; font-family:sans-serif; font-size:17px; padding-bottom: 20px;  color: #fff; line-height: 25px;">
                            @lang(Session::get('front_lang_file').'.API_ORDER_PLACED')
                            
                        </td>
                    </tr>
                    <tr>
                    <td style="text-align:center; font-family:sans-serif; font-size:17px; padding-bottom: 20px;  color: #fff; line-height: 25px;">
                        @lang(Session::get('front_lang_file').'.ADMIN_TRANSACTION_ID')&nbsp;:&nbsp;{{$transaction_id}}
                    </td>
                </tr>
                </table>
            </td>
        </tr>

为什么所有@lang(Session::get('front_lang_file') 没有在队列中被调用?希望有人可以帮助我解决这个问题。提前致谢。

【问题讨论】:

    标签: php laravel laravel-5 queue


    【解决方案1】:

    因为队列作业在与会话进程不同的进程中运行,因此,您无法访问会话(在这种情况下为语言环境)。您需要传递会话作为 Job 的构造函数的参数。像这样:

    NewOrderListener::dispatch(Event $event, Session $session)
    

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 2012-12-18
      • 2023-04-04
      • 2011-09-26
      • 1970-01-01
      • 2019-06-04
      相关资源
      最近更新 更多