如何在codeigniter中使用composer包?

Tjo*_*rie 15 php namespaces codeigniter-2 composer-php

我跟着这篇文章:http://philsturgeon.co.uk/blog/2012/05/composer-with-codeigniter

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

他的帖子里缺少什么?

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

Tjo*_*rie 34

归功于@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 */
Run Code Online (Sandbox Code Playgroud)

  • FrontController路径.基本上是index.php文件; 如果我没有弄错的话,它位于根目录中. (2认同)

Sea*_*nWM 33

对于CodeIgniter 3.x和composer,建议只设置$config['composer_autoload']TRUE或自定义路径application/config/config.php.

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

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


Tun*_*axx 7

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

如果您已正确遵循所有其他说明,那么您需要做的就是在index.php文件的最后附近添加以下代码:

/*
 * --------------------------------------------------------------------
 * COMPOSER AUTOLOAD
 * --------------------------------------------------------------------
 */
include_once './vendor/autoload.php';
Run Code Online (Sandbox Code Playgroud)

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

/*
 * --------------------------------------------------------------------
 * LOAD THE BOOTSTRAP FILE
 * --------------------------------------------------------------------
 *
 * And away we go...
 *
 */
 require_once BASEPATH.'core/CodeIgniter.php';
Run Code Online (Sandbox Code Playgroud)


小智 6

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

// Composer Autoloader
require FCPATH.'vendor/autoload.php';
Run Code Online (Sandbox Code Playgroud)


Kwa*_*Nti 6

在Codeigniter3.x中,您可以轻松地做到这一点,方法是进入application / config / config.php并查找此行

$config['composer_autoload'] = FALSE;
Run Code Online (Sandbox Code Playgroud)

确保将其设置为TRUE,紧接在您需要它之后再执行以下操作:

require_once APPPATH.'vendor/autoload.php';
Run Code Online (Sandbox Code Playgroud)

因此,您得到的是这样的:

/*
|--------------------------------------------------------------------------
| 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';
Run Code Online (Sandbox Code Playgroud)

只要确保您的应用程序文件夹中有供应商文件夹,就可以了。

我最近发现您可以只设置$ 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';
Run Code Online (Sandbox Code Playgroud)

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

我想这会有所帮助。


小智 5

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

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

    require FCPATH . 'vendor/autoload.php';
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者直接在您要使用的控制器中自动加载。

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