Codegniter 4.0.0中的PHP编译器
我试图在控制器中调用我的库“Phpmailer”。我知道有一个框架库来执行这项任务,但是我仍然更喜欢PHPMailer。在3.0.0版中,我学习了一个关于将库集成到框架的教程,显然这会产生一些冲突。如何在Codeigniter 4.0.0中调用我的PHPMailer库 教程: 我的图书馆:Codegniter 4.0.0中的PHP编译器,php,codeigniter,phpmailer,codeigniter-4,Php,Codeigniter,Phpmailer,Codeigniter 4,我试图在控制器中调用我的库“Phpmailer”。我知道有一个框架库来执行这项任务,但是我仍然更喜欢PHPMailer。在3.0.0版中,我学习了一个关于将库集成到框架的教程,显然这会产生一些冲突。如何在Codeigniter 4.0.0中调用我的PHPMailer库 教程: 我的图书馆: <?php namespace App\Libraries; use CodeIgniter\Libraries; use PHPMailer\PHPMailer\PHPMailer; use PHP
<?php
namespace App\Libraries;
use CodeIgniter\Libraries;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
defined('BASEPATH') or exit('No direct script access allowed');
class Phpmailer {
public function load(){
require_once APPPATH.'ThirdParty/PHPMailer/Exception.php';
require_once APPPATH.'ThirdParty/PHPMailer/PHPMailer.php';
require_once APPPATH.'ThirdParty/PHPMailer/SMTP.php';
$mail = new PHPMailer;
return $mail;
}
}
错误本身很简单,但我怀疑它背后有更大的问题
未定义的属性:应用程序\u控制器\u检索:$load
这不是名称空间问题,您正在尝试访问不存在的内容
$this->load->//第10行
正在尝试访问$this
(控制器)的属性load
,您向我们展示了该属性不存在
这个问题没有真正的一行解决方案。您试图如何将库“加载”到控制器中并不是您想要做的事情(查看CI4中的Services类,我认为这是您所想象的)
在我看来,这是最简单的方法:
给库一个构造函数。在其中创建/存储PHPMailer对象,并包含向库本身发送电子邮件的工作。例如:
<?php
namespace App\Libraries;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
defined('BASEPATH') or exit('No direct script access allowed');
class Phpmailer {
private $mailer;
function __construct(){
$mailer = new PHPMailer\PHPMailer\PHPMailer();
}
//Example - do some work
public function send(){
// SMTP configuration
...
if ($this->mailer->send())
{
...
}
}
...
}
与其直接使用
ing CodeIgniter\Controller,不如让您的控制器类扩展BaseController。然后,如果您需要向控制器的父类添加内容,那么您就不会接触框架的“系统”文件
如果这个库一直都是您想要的,那么您可以将它作为控制器的类属性,并在构建控制器本身时创建它,因此它总是存在的
这假设您已经在需要的地方找到了实际的PHPMailer,并且CI框架正在自动加载。如果您还没有通过Composer安装CI/PHP编译器,我会郑重建议您将您的项目移动到已安装的版本。这样做将为您的项目节省终身的技术债务,并使名称空间的事情变得更容易。错误本身很简单,但我怀疑背后有更大的问题 未定义的属性:应用程序\u控制器\u检索:$load 这不是名称空间问题,您正在尝试访问不存在的内容
$this->load->//第10行
正在尝试访问$this
(控制器)的属性load
,您向我们展示了该属性不存在
这个问题没有真正的一行解决方案。您试图如何将库“加载”到控制器中并不是您想要做的事情(查看CI4中的Services类,我认为这是您所想象的)
在我看来,这是最简单的方法:
给库一个构造函数。在其中创建/存储PHPMailer对象,并包含向库本身发送电子邮件的工作。例如:
<?php
namespace App\Libraries;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
defined('BASEPATH') or exit('No direct script access allowed');
class Phpmailer {
private $mailer;
function __construct(){
$mailer = new PHPMailer\PHPMailer\PHPMailer();
}
//Example - do some work
public function send(){
// SMTP configuration
...
if ($this->mailer->send())
{
...
}
}
...
}
与其直接使用ing CodeIgniter\Controller,不如让您的控制器类扩展BaseController。然后,如果您需要向控制器的父类添加内容,那么您就不会接触框架的“系统”文件
如果这个库一直都是您想要的,那么您可以将它作为控制器的类属性,并在构建控制器本身时创建它,因此它总是存在的
这假设您已经在需要的地方找到了实际的PHPMailer,并且CI框架正在自动加载。如果您还没有通过Composer安装CI/PHP编译器,我会郑重建议您将您的项目移动到已安装的版本。这样做将为您的项目节省终身的技术债务,并使名称空间的事情变得更加容易。让您自己的类和PHPMailer使用仅在大小写上有所不同的名称似乎是不明智的。为PHPMailer提供别名以避免混淆。这个错误看起来像是类命名、位置和加载方面的问题,而不是PHPMailer方面的问题。您没有使用composer的选项吗?这比这好多了。让你自己的类和PHPMailer使用一个只有大小写不同的名称似乎是不明智的。为PHPMailer提供别名以避免混淆。这个错误看起来像是类命名、位置和加载方面的问题,而不是PHPMailer方面的问题。您没有使用composer的选项吗?比这好多了。
<?php
namespace App\Controllers;
use App\Libraries\Phpmailer;
class Retrieve extends BaseController {
public function send($email){
$mailLibrary = new Phpmailer();
$mailLibrary->send();
}
}