Laravel 5.1错误调用未定义的函数App \ Http \ Controllers \ Auth \ sendRegistermail()

时间:2015-11-24 11:43:24

标签: php laravel laravel-5 laravel-5.1 mandrill

我正在尝试通过我的Laravel 5.1项目中的Mandrill发送自动邮件。它正在工作,但我正在我的AuthController中设置我的Mandrill呼叫,现在我想要一个类App \ Marketing,我将发送所有发送电子邮件的功能。因此,在动作发生后我的控制器中我可以用一行代码调用该函数,但这一行给我带来麻烦。

我的App \ Marketing类现在看起来像这样

class Marketing{

private $mandrill;

/**
* Via construct injection
*
*/
public function __construct(Mail $mandrill)
{
    $this->mandrill = $mandrill;
}

public function sendRegistermail()
{
    // In template content you write your dynamic content if you use <mc:edit> tags.
    $template_content = [];
    $message = array(
        'subject' => 'Welkom bij SP*RK! - Jouw accountgegevens',
        'from_email' => 'noreply@spark.com',
        'from_name' => 'SP*RK',
        'to' => array(
            array(
                'email' => $request->input('email'),
                'name' => $request->input('name'),
                'type' => 'to'
            )
        ),
        'merge_vars' => array(
            array(
                'rcpt' => $request->input('email'),
                'vars' => array(
                    array(
                        'name' => 'NAME',
                        'content' => $request->input('name')
                    ),
                    array(
                        'name' => 'EMAIL',
                        'content' => $request->input('email')
                    )
                )
            )
        )
    );

    //email validation
    if (str_contains($request['email'], "@kuleuven.be")) {
        MandrillMail::messages()->sendTemplate('registration-mail', $template_content, $message);
    } else {
        MandrillMail::messages()->sendTemplate('registration-mail-notactive', $template_content, $message);
    }
}

// ----- OR  -------    

/**
* Via method injection
*
*/
public function sendMail(Mail $mandrill, $data)
{
    $mandrill->messages()->sendTemplate($data)
}

// ----- OR  -------

/**
* Via the Facade
*
*/
public function sendMailByFacade($data)
{
    \MandrillMail::messages()->sendTemplate($data);
}
}

这是我在postRegister函数中注册后尝试调用该函数的方法:

sendRegistermail();

return redirect($this->redirectPath());

1 个答案:

答案 0 :(得分:1)

sendRegistermailMarketing类的一种方法,您应该在该对象的实例上调用它

因此,首先,您必须在控制器中创建一个Marketing对象实例。这是一个很好的方法,它通过在构造函数中注入依赖项来实现,如下所示:

//your controller class
class Controller
{
    protected $marketing;

    //Your controller's constructor
    public function __construct(Marketing $marketing)
    {
        $this->marketing = $marketing;
    }
}

或者您可以使用代码中提供的其他方法之一来注入实例。

拥有Marketing类的实例后,您只需要在该实例上调用sendRegistermail方法。在您的控制器方法中:

//call the method on the marketing instance
$this->marketing->sendRegistermail();