苗条 - 路线上的 Swift Mailer 是工作,但如果在控制器上移动后出现错误



我在我的苗条项目中添加了库slimcontroller和swift mailer,在路线上进展顺利时:

Route::get('/send', function() use ($app, $mailer) {
$message = Swift_Message::newInstance('Activation Code')
                ->setFrom(array('xxx@gmail.com' => 'xxx'))
                ->setTo(array('xxxs@gmail.com' => 'xxxs'))
                ->setBody('Test');
// Send the message
$results = $mailer->send($message);
// Print the results, 1 = message sent!
print($results);
});

但是在控制器上运行后出现错误

class MyController extends SlimControllerSlimController
{
    public function getRegisters()
    {
        $data = (empty(Session::flash())) ? array(
            'token' => Token::getToken()
        ) : array_merge(Session::flash(), array(
            'token' => Token::getToken()
        ));
        return $this->render('auth/register.html', $data);
    }
    public function postRegisters()
    {
        $message = Swift_Message::newInstance('Activation Code')->setFrom(array(
            'xxx@gmail.com' => 'xxx'
        ))->setTo(array(
            'xxxs@gmail.com' => 'xxxs'
        ))->setBody('Test');
        // Send the message
        $results = $this->app->mailer->send($message);
    }
}

致命错误:在非对象上调用成员函数 send()。我参考来自fortrabbit/slimcontroller。

我只是在这里猜测(因为我没有您的完整控制器代码)您的控制器$this->app为空。Slim 不会在控制器中注入$app对象。

有几种方法可以使用 Slim 注入依赖项。我不完全确定这里的最佳实践是什么。但我会开始看这里。

此外,您可以在控制器中执行一些令人讨厌的黑客攻击__construct。虽然我不推荐它,但它看起来像这样:

class Controller {
    protected $app;
    public function __construct()
    {
         $this->app = SlimSlim::getInstance();
    }
}

如果您确定控制器具有 $app 属性,则问题在于您如何注入 $mailer 实例。正如我从你的路线中看到的那样,你正在通过$app$mailer到关闭。

可以将该邮件程序对象作为单一实例注入到应用中。代码应如下所示:

$app->mailer = function() {
   $mailer = new WhateverMailerYouAreUsing();
   // ...config stuff...
   return $mailer;
};

相关内容

  • 没有找到相关文章

最新更新