私はこの記事をフォローしました: http://philsturgeon.co.uk/blog/2012/05/composer-with-codeigniter
しかし、私はFatal error: Class 'Buzz\Browser' not found
。
彼の投稿には何が欠けていますか?
コントローラまたはアプリケーションに名前空間がありません。名前空間のないフレームワークの1つのコントローラーのアクションでその1つのパッケージを使用できるようにしたいと思っていました。
@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 */
CodeIgniter 3.xおよびcomposerの場合、$config['composer_autoload']
をTRUE
に設定するだけで suggested になりますまたはapplication/config/config.php
のカスタムパス。
CIは、vendor
ディレクトリがapplication
ディレクトリ内にあると想定しているようです。それは私の場合ではありませんでした。私は次のことをしました:
$config['composer_autoload'] = 'vendor/autoload.php';
編集:くそー、私はちょうど@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';
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';
Composerを使用して必要なクラスファイルを自動ロードする方法は2つあります。
ルートディレクトリの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";