web-dev-qa-db-ja.com

codeigniterでcomposerパッケージを使用する方法は?

私はこの記事をフォローしました: http://philsturgeon.co.uk/blog/2012/05/composer-with-codeigniter

しかし、私はFatal error: Class 'Buzz\Browser' not found

彼の投稿には何が欠けていますか?

コントローラまたはアプリケーションに名前空間がありません。名前空間のないフレームワークの1つのコントローラーのアクションでその1つのパッケージを使用できるようにしたいと思っていました。

15
Tjorriemorrie

@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 */
34
Tjorriemorrie

CodeIgniter 3.xおよびcomposerの場合、$config['composer_autoload']TRUEに設定するだけで suggested になりますまたはapplication/config/config.phpのカスタムパス。

CIは、vendorディレクトリがapplicationディレクトリ内にあると想定しているようです。それは私の場合ではありませんでした。私は次のことをしました:

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

32
SeanWM

編集:くそー、私はちょうど@Tjorriemorrieとほとんど同じことを言った

他のすべての指示に正しく従っている場合は、次のコードを追加するだけです最後近くに index.phpファイル:

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

...スロットに入れることを確認してくださいbefore CodeIgniter Bootstrapファイルが呼び出されます:

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

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で定義された定数です。

これが役立つと思います。

コントローラにComposer Autoloaderを直接追加できます:

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

Composerを使用して必要なクラスファイルを自動ロードする方法は2つあります。

  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 {...}
    
2

私は Kenjis codeigniter composer package を使用しています。これにより、ベンダーディレクトリがルートから外れます。定義済みの定数(私が知っている)がないためルート、私は以下を使用しました:

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