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

Posted

技术标签:

【中文标题】Laravel 5.1 错误调用未定义函数 App\\Http\\Controllers\\Auth\\sendRegistermail()【英文标题】:Laravel 5.1 ERROR Call to undefined function App\Http\Controllers\Auth\sendRegistermail()Laravel 5.1 错误调用未定义函数 App\Http\Controllers\Auth\sendRegistermail() 【发布时间】:2016-02-26 20:12:05 【问题描述】:

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

我的 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());

【问题讨论】:

sendRegistermail 是您的 Marketing 类的方法,您应该在该对象的实例上调用它 你能帮我看看怎么做吗?我对 Laravel 有点陌生。 【参考方案1】:

sendRegistermail 是您的 Marketing 类的方法,您应该在该对象的实例上调用它

所以,首先你必须在你的控制器中创建一个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();

【讨论】:

我试过你的方法,我得到这个错误 Undefined property: App\Http\Controllers\Auth\AuthController::$marketing 在这一行 $this->marketing->sendRegistermail();在我的控制器中 您应该验证在构建控制器时,marketing 实例被正确注入,使用dd($marketing) 检查构造函数以检查其值 我尝试过这样的事情:$Marketing = new Marketing; $Marketing->sendRegistermail() 我认为它有效,因为现在我的 Marketing.php 文件中出现错误 我得到这个错误 Undefined variable: request on this line 'email' => $request->input('email'),我猜我的班级无法读取我的表单的输入字段了解我的班级如何到达输入字段 您的 $request 变量无法从您的类内部访问,因此您必须将数据从控制器传递到您的类。例如,您可以将其作为方法的参数传递:$Marketing-&gt;sendRegistermail($request)

以上是关于Laravel 5.1 错误调用未定义函数 App\Http\Controllers\Auth\sendRegistermail()的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 UrlGenerator 路由未定义错误

辅助函数未加载 laravel 5 - 调用未定义函数

Laravel-我需要帮助将 user_id 传递给 SQL 数据库中的 tasks_table 错误:调用未定义的方法 App\\User::id()

未捕获的错误:将 laravel 5.8 升级到 8 后调用未定义的函数 Illuminate\Mail\TransportManager()

Laravel Horizo​​n 抛出错误:调用未定义的函数 Laravel\Horizo​​n\Console\pcntl_async_signals()

PHP 致命错误:未捕获的错误:使用 Laravel 5.8 和 PHP 7.4 调用未定义函数 Whoops\Exception\xdebug_is_enabled()