اذهب إلى المحتوى

السؤال

نشر

أحاول إطلاق حدث معيّن عندما يقوم المستخدم بالتسجيل في الموقع لإرسال بريد الكتروني له من طرف الخادم ضمن Laravel Lumen ولكن يظهر لدي الخطأ التالي ولا يتم إطلاق هذا الحدث:

Type error: Argument 1 passed to Illuminate\Mail\Mailable::queue() must implement interface Illuminate\Contracts\Queue\Factory, instance of Illuminate\Queue\DatabaseQueue given

ولدي الكود التالي ضمن المتحكّم الخاص بتوثيق المستخدم:

$this->dispatch(new RegisteredUser($user));

والكود الخاص بـ RegsiteredUser.php:

<?php

namespace App\Mail;

use App\Models\User;
use Illuminate\Mail\Mailable;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

classRegisteredUser extends Mailable implements ShouldQueue
{
    use Queueable, SerializesModels;

    protected $user;

    public function __construct(User $user)
    {
         $this->user = $user;
    }

    /**
      * Build the message.
      *
      * @return $this
      */
      public function build()
      {
         return $this->view('testmail')->to('testmail@testmail.com', 'Test')
        ->from('testmail@testmail.com', 'test')->replyTo('testmail@testmail.com', 'test')
        ->subject('Hello');
      }
}

كيف أستطيع حل هذه المشكلة؟

Recommended Posts

  • 0
نشر

ربما يجب عليك تحديث نسخة laravel lumen التي تعمل عليها و التأكد مرة أخرى من المشكلة , أو يمكنك إنشاء Mail Provider جديد ليتم استعماله بدلاً من Provider الأقتراضي في المسار التالي 

app\Providers

وليكن باسم MailServiceProvider.php 

<?php 

namespace App\Providers;

use Illuminate\Mail\Mailer;
use Illuminate\Mail\MailServiceProvider as BaseProvider;
class MailServiceProvider extends BaseProvider
{
    protected function registerIlluminateMailer()
    {
		$this->app->singleton('mailer', function ($app) {
            $config = $app->make('config')->get('mail');
            $mailer = new Mailer(
                $app['view'], $app['swift.mailer'], $app['events']
            );

            $mailer->setQueue($app['queue']);
            foreach (['from', 'reply_to', 'to'] as $type) {
                $this->setGlobalAddress($mailer, $config, $type);
            }
            return $mailer;
        });
		$this->app->configure('mail');
        $this->app->alias('mailer', \Illuminate\Contracts\Mail\Mailer::class);
    }
}

ثم عليك بتسجيل هذه Provider في ملف app.php الموجود بداخل مجلد bootstrap عن طريق إضافة السطر التالي 

$app->register('\App\Providers\MailServiceProvider::class');

 

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...