【问题标题】:Codeigniter 3 composer and vendor directoryCodeigniter 3 作曲家和供应商目录
【发布时间】:2018-10-27 08:01:26
【问题描述】:

我已经安装了 codeigniter 3.1.8 并使用 composer 安装了这个库https://github.com/php-amqplib/php-amqplib

composer require php-amqplib/php-amqplib

这已经创建了一个目录供应商

我已经在How to use composer packages in codeigniter?How to use composer packages in codeigniter? 上查看了有关如何使用该库的公认答案

但这是我在供应商中的目录结构。

在 php-amqplib 内部

在 php-amqplib 内部

如果我查看index.php,我发现 fcpath 已经被定义了

// Path to the front controller (this file) directory
define('FCPATH', dirname(__FILE__).DIRECTORY_SEPARATOR);

require_once BASEPATH.'core/CodeIgniter.php';

再次定义它会导致错误。我怎样才能在我的控制器方法中使用 php-amqplib?。

【问题讨论】:

  • 你试过了吗:require_once APPPATH.'vendor/autoload.php';
  • 不,但我可以做到。在那个答案中,我必须放置供应商 iside 应用程序。这是否意味着 codeigniter 创建的应用程序文件夹,还是应该保留在我的屏幕截图中的位置,我现在如何在我的控制器中访问它?。

标签: php codeigniter php-amqplib


【解决方案1】:

在 /application/config/config.php 中更改 composer_autoload 配置,如下所示 $config['composer_autoload'] = 'vendor/autoload.php';

【讨论】:

    【解决方案2】:

    这将打开和关闭连接

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    use PhpAmqpLib\Message\AMQPMessage;
    use PhpAmqpLib\Connection\AMQPStreamConnection; 
    
    class Welcome extends CI_Controller {
    
        public function index()
        {
            $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
            $channel = $connection->channel();
            $channel->queue_declare('hello', false, false, false, false);
    
            $msg = new AMQPMessage('Yur message goes here....');
            $channel->basic_publish($msg, '', 'hello');
    
            $channel->close();
            $connection->close();
    
            $this->load->view('welcome_message');
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果您的问题是 - 我怎样才能在我的控制器方法中使用 php-amqplib?

      第1步 :

      一开始就允许或要求 autoload.php 文件,但在 codeigniter 上你一般不能这样做。所以在配置文件中更改一行,将自动要求 autoload.php 文件。

      CodeIgniter/application/config/config.php查找:

      $config['composer_autoload'] = FALSE;$config['composer_autoload'] = TRUE;

      第2步 :

      在你的控制器类上是这样的:

      <?php
      defined('BASEPATH') OR exit('No direct script access allowed');
      
      use PhpAmqpLib\Connection\AMQPStreamConnection;
      use PhpAmqpLib\Message\AMQPMessage;
      
      class Welcome extends CI_Controller {
         public function index()
         {
              // your business logic like this
              $msg = new AMQPMessage($msg_body);
              $ch->batch_basic_publish($msg, $exchange);
         }
      }
      
      步骤 - 3:

      现在你可以通过 URL 调用它了

      http://example.com/Welcome
      

      现在更多ref:PhpAmqpLib

      【讨论】:

      • 供应商必须在codeigniter应用目录中。
      • 如何在控制器功能结束时关闭连接?
      • @Gandalf 如果您还有其他问题,请单独发布 - 本网站的设计目的是在每一页上都有一个问题及其答案,而不是讨论线程,以便未来的读者更容易找到他们需要的答案。
      猜你喜欢
      • 2016-08-30
      • 1970-01-01
      • 2018-05-11
      • 2012-08-09
      • 2021-01-05
      • 2014-08-08
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多