22

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

但我明白了Fatal error: Class 'Buzz\Browser' not found

他的职位缺少什么?

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

4

7 回答 7

45

对于 CodeIgniter 3.x 和 composer,建议设置$config['composer_autoload']为.TRUEapplication/config/config.php

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

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

于 2016-11-15T16:07:08.567 回答
38

感谢@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 */
于 2013-03-06T10:18:37.040 回答
11

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

$config['composer_autoload'] = FALSE;

确保将其设置为 TRUE 并在它之后您 require_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 为根文件夹定义的常量。

我想这会有所帮助。

于 2017-04-28T22:30:25.807 回答
8

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

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

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

...只需确保在调用 CodeIgniter 引导文件之前将其插入:

/*
 * --------------------------------------------------------------------
 * LOAD THE BOOTSTRAP FILE
 * --------------------------------------------------------------------
 *
 * And away we go...
 *
 */
 require_once BASEPATH.'core/CodeIgniter.php';
于 2013-03-20T06:55:27.583 回答
6

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

// Composer Autoloader
require FCPATH.'vendor/autoload.php';
于 2012-12-12T17:05:17.537 回答
4

有两种方法可以自动加载使用 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 {...}
    
于 2018-05-05T16:36:56.163 回答
1

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

$root = getcwd();
$config['composer_autoload'] = "$root/vendor/autoload.php";
于 2017-10-19T07:28:40.973 回答