我想发送邮件,所以我编写了一个邮件类,这样我就可以传递用户数据来发送邮件。 这是我的代码类Mailer.php
|DataDirectory|\bin\Debug\Calculations.mdf
扩展Mailer类的我的类:
<?php
use Mail;
abstract class Mailer{
public function sendTo($user, $subject,$view, $data = [])
{
Mail::send($view, $data, function($message)
{
$message->to($user->email, $user->firstname)
->subject($subject)
->from('test@test.com', 'Test');
});
}
}
我想从任何控制器调用这个类,所以我可以传递用户数据发送邮件,但我总是得到这个错误调用成员函数welcome()on null:也许我做错了什么:
class UserMailer extends Mailer{
public function welcome(User $user){
$view = 'emails.welcome';
$data = [];
$subject = 'test subject';
return $this->sendTo($user, $subject, $view, $data);
}
我想将此发送给用户ID 1.我的代码出了什么问题? THX
答案 0 :(得分:0)
问题是$this->mailer
属性为null。你希望它可以自动注入框架的IoC机制,但事实并非如此。
为了使某些类通过类型提示自动注入(如在构造函数中),必须在IoC容器中注册该类。喜欢(在你的/app/Providers/AppServiceProvider.php
中):
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
...
$this->app->bind(\App\Contracts\Mailer::class, \App\MyMailerImplementation::class);
...
}
}
确保首先定义\App\Contracts\Mailer
合约(只是您的邮件程序的接口),并强制您的Mailer
类实现通过以下方式继承和实现该接口:
use App\Contracts\Mailer as MailerContract;
class MyMailerImplementation implements MailerContract {
...
}
注意:您只能使用Mailer
代替MyMailerImplementation
,请确保不要使用命名空间。