2012-12-06 13 views
10

Ho seguito questo articolo: http://philsturgeon.co.uk/blog/2012/05/composer-with-codeigniterCome utilizzare i pacchetti di composizione in codeigniter?

Ma ottengo Fatal error: Class 'Buzz\Browser' not found.

Cosa manca dal suo post?

Il mio controller o applicazione non è assegnato ai nomi. Speravo di essere in grado di utilizzare quel solo pacchetto nell'azione di un controller in un framework non assegnato a un singolo nome.

+0

Si sta utilizzando il caricatore automatico o no? –

+0

Sì, nell'indice.php. – Tjorriemorrie

risposta

32

credito al @jmadsen

Questo è possibile solo ottenere l'ordine di caricamento corretto:

/* 
* -------------------------------------------------------------------- 
* 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 */ 
+0

cos'è 'FCPATH' – iGbanam

+2

Il percorso di FrontController. Fondamentalmente il file index.php; che si trova nella directory radice se non mi sbaglio. – Tjorriemorrie

3

È possibile aggiungere direttamente il compositore Autoloder nel controller:

// Composer Autoloader 
require FCPATH.'vendor/autoload.php'; 
+0

L'ho incluso nell'index.php; il problema è che la classe non viene trovata usando FQN. Sai come farlo? – Tjorriemorrie

+0

Non ha funzionato nemmeno per me in index.php. Ecco perché l'ho inserito direttamente nel controller. Si può provare ad estendere CI_Controller e aggiungere il Composer Autoloader nel costruttore? – Kinobi

5

EDIT: Accidenti, ho appena detto praticamente la stessa cosa di @Tjorriemorrie

Se avete seguito correttamente tutte le altre direzioni, tutto quello che dovete fare è aggiungere il seguente codice molto vicino alla fine il file index.php:

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

... basta assicurarsi si SLOT in prima il file CodeIgniter Bootstrap si chiama:

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

per CodeIgniter 3.xe e compositore, è suggested a solo impostare $config['composer_autoload'] a TRUE o un percorso personalizzato in application/config/config.php.

Sembra che CI supponga che la directory vendor si trovi nella directory application. Non era il mio caso. Ho fatto la seguente:

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

2

Bene in Codeigniter3.x si può facilmente farlo andando nel application/config/config.php e cercare questa linea

$config['composer_autoload'] = FALSE; 

Assicurati impostarlo su TRUE e subito dopo si require_once questo:

require_once APPPATH.'vendor/autoload.php'; 

in modo da ottenere qualcosa di simile:

/* 
|-------------------------------------------------------------------------- 
| 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'; 

Assicurati solo di avere la cartella del venditore nella cartella dell'applicazione e sei a posto.

Recentemente ho scoperto che è possibile impostare $ config ['composer_autoload'] = TRUE; e metti la cartella del venditore nella cartella dell'applicazione e il gioco è fatto.

0

Sto usando Kenjis codeigniter composer package e mette la directory del fornitore fuori dalla radice.Poiché non esiste una costante predefinita (che io sappia) per la radice, ho utilizzato quanto segue:

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