Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codegniter 4.0.0中的PHP编译器_Php_Codeigniter_Phpmailer_Codeigniter 4 - Fatal编程技术网

Codegniter 4.0.0中的PHP编译器

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

我试图在控制器中调用我的库“Phpmailer”。我知道有一个框架库来执行这项任务,但是我仍然更喜欢PHPMailer。在3.0.0版中,我学习了一个关于将库集成到框架的教程,显然这会产生一些冲突。如何在Codeigniter 4.0.0中调用我的PHPMailer库

教程:

我的图书馆:

<?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();

    }
}