【问题标题】:How to use composer packages in codeigniter?如何在 codeigniter 中使用作曲家包?
【发布时间】:2012-11-24 09:09:45
【问题描述】:

我关注了这篇文章:http://philsturgeon.co.uk/blog/2012/05/composer-with-codeigniter

但我得到Fatal error: Class 'Buzz\Browser' not found

他的帖子中缺少什么?

我的控制器或应用程序没有命名空间。我希望能够在非命名空间框架中的一个控制器的操作中使用那个包。

【问题讨论】:

  • 你是否使用自动加载器?

标签: php namespaces codeigniter-2 composer-php


【解决方案1】:

您可以直接在控制器中添加 Composer Autoloder:

// Composer Autoloader
require FCPATH.'vendor/autoload.php';

【讨论】:

  • 我确实将它包含在 index.php 中;问题是使用 FQN 找不到该类。你知道怎么做吗?
  • 它在 index.php 中对我也不起作用。这就是为什么我直接把它放在控制器中。您可以尝试扩展 CI_Controller 并在构造函数中添加 Composer Autoloader 吗?
【解决方案2】:

感谢@jmadsen

这可以通过正确的加载顺序来实现:

/*
 * --------------------------------------------------------------------
 * LOAD THE BOOTSTRAP FILE
 * --------------------------------------------------------------------
 *
 * And away we go...
 *
 */
// Composer Autoloader
require FCPATH . 'vendor/autoload.php';

require_once BASEPATH.'core/CodeIgniter.php';

/* End of file index.php */

【讨论】:

  • FrontController 路径。基本上是 index.php 文件;如果我没记错的话,它位于根目录中。
  • 所以我必须把它放在我的 index.php 中??
  • 我将 composer.json 和 vendor 目录添加到应用程序文件夹中。所以,你需要使用:require APPPATH . 'vendor/autoload.php';
【解决方案3】:

编辑:该死,我刚才说的和@Tjorriemorrie 几乎完全一样

如果您正确地遵循了所有其他指示,您需要做的就是在您的 index.php 文件的末尾添加以下代码

/*
 * --------------------------------------------------------------------
 * COMPOSER AUTOLOAD
 * --------------------------------------------------------------------
 */
include_once './vendor/autoload.php';

...只要确保在调用 CodeIgniter Bootstrap 文件之前将其插入

/*
 * --------------------------------------------------------------------
 * LOAD THE BOOTSTRAP FILE
 * --------------------------------------------------------------------
 *
 * And away we go...
 *
 */
 require_once BASEPATH.'core/CodeIgniter.php';

【讨论】:

    【解决方案4】:

    对于 CodeIgniter 3.x 和 Composer,只需将 $config['composer_autoload'] 设置为 TRUEapplication/config/config.php 中的自定义路径即可使用 suggested

    似乎 CI 假定 vendor 目录位于 application 目录中。那不是我的情况。我做了以下事情:

    $config['composer_autoload'] = 'vendor/autoload.php';

    【讨论】:

      【解决方案5】:

      在 Codeigniter3.x 中,您可以通过进入 application/config/config.php 并查找这一行来轻松做到这一点

      $config['composer_autoload'] = FALSE;
      

      确保您将其设置为 TRUE,然后您需要_once:

      require_once APPPATH.'vendor/autoload.php';
      

      所以你会得到这样的结果:

      /*
      |--------------------------------------------------------------------------
      | Composer auto-loading
      |--------------------------------------------------------------------------
      |
      | Enabling this setting will tell CodeIgniter to look for a Composer
      | package auto-loader script in application/vendor/autoload.php.
      |
      |   $config['composer_autoload'] = TRUE;
      |
      | Or if you have your vendor/ directory located somewhere else, you
      | can opt to set a specific path as well:
      |
      |   $config['composer_autoload'] = '/path/to/vendor/autoload.php';
      |
      | Note: This will NOT disable or override the CodeIgniter-specific
      |   autoloading (application/config/autoload.php)
      */
      $config['composer_autoload'] = TRUE;
      require_once APPPATH.'vendor/autoload.php';
      

      只要确保您的供应商文件夹位于应用程序文件夹中即可。

      我最近发现你可以设置 $config['composer_autoload'] = TRUE;并将您的供应商文件夹放在应用程序文件夹中,就是这样。

      对于那些希望您的供应商文件夹在应用程序文件夹之外的人。您可以通过这种方式实现它:例如,您想将它放在根文件夹中。

      提示:已经在评论中描述过

      $config['composer_autoload'] = '/path/to/vendor/autoload.php';

      /*
      |--------------------------------------------------------------------------
      | Composer auto-loading
      |--------------------------------------------------------------------------
      |
      | Enabling this setting will tell CodeIgniter to look for a Composer
      | package auto-loader script in application/vendor/autoload.php.
      |
      |   $config['composer_autoload'] = '/path/to/vendor/autoload.php';
      |
      | Note: This will NOT disable or override the CodeIgniter-specific
      |   autoloading (application/config/autoload.php)
      */
      $config['composer_autoload'] = FCPATH .'vendor/autoload.php';
      

      其中 FCPATH 是 codeigniter 为根文件夹定义的常量。

      我想这会有所帮助。

      【讨论】:

      • require_once 行不是必需的。由system/core/CodeIgniter.php处理
      • 好的,我补充说,如果用户决定重新定位供应商文件夹。感谢您的评论。
      • 我不得不使用APPPATH . '../vendor/autoload.php'
      • 我认为是因为你的文件夹结构
      【解决方案6】:

      我正在使用Kenjis codeigniter composer package,它将供应商目录置于根目录之外。由于根没有预定义的常量(我知道),因此我使用了以下内容:

      $root = getcwd();
      $config['composer_autoload'] = "$root/vendor/autoload.php";
      

      【讨论】:

        【解决方案7】:

        有两种方法可以自动加载使用 composer 所需的类文件。

        1. 在根目录的 index.php 中添加以下行。

          require FCPATH . 'vendor/autoload.php';
          
        2. 或者直接在你要使用的控制器中自动加载。

          defined('BASEPATH') OR exit('No direct script access allowed');
          
          require FCPATH . 'vendor/autoload.php';
          
          class Home extends CI_Controller {...}
          

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-05
          • 1970-01-01
          • 2015-11-27
          • 1970-01-01
          • 2013-05-26
          • 2016-04-04
          • 2021-10-27
          • 1970-01-01
          相关资源
          最近更新 更多