我关注了这篇文章: http: //philsturgeon.co.uk/blog/2012/05/composer-with-codeigniter
但我明白了Fatal error: Class 'Buzz\Browser' not found
。
他的职位缺少什么?
我的控制器或应用程序没有命名空间。我希望能够在非命名空间框架中的一个控制器的操作中使用那个包。
我关注了这篇文章: http: //philsturgeon.co.uk/blog/2012/05/composer-with-codeigniter
但我明白了Fatal error: Class 'Buzz\Browser' not found
。
他的职位缺少什么?
我的控制器或应用程序没有命名空间。我希望能够在非命名空间框架中的一个控制器的操作中使用那个包。
对于 CodeIgniter 3.x 和 composer,建议只设置$config['composer_autoload']
为.TRUE
application/config/config.php
似乎 CI 假定vendor
目录在application
目录中。那不是我的情况。我做了以下事情:
$config['composer_autoload'] = 'vendor/autoload.php';
感谢@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 */
那么在 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 为根文件夹定义的常量。
我想这会有所帮助。
编辑:该死,我刚才说的和@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';
您可以直接在控制器中添加 Composer Autoloder:
// Composer Autoloader
require FCPATH.'vendor/autoload.php';
有两种方法可以自动加载使用 composer 所需的类文件。
在根目录的 index.php 中添加以下行。
require FCPATH . 'vendor/autoload.php';
或者直接在要使用的控制器中自动加载。
defined('BASEPATH') OR exit('No direct script access allowed');
require FCPATH . 'vendor/autoload.php';
class Home extends CI_Controller {...}
我正在使用Kenjis codeigniter composer package,它将供应商目录置于根目录之外。由于根没有预定义的常量(我知道),我使用了以下内容:
$root = getcwd();
$config['composer_autoload'] = "$root/vendor/autoload.php";