web-dev-qa-db-fra.com

Comment utiliser les packages composer dans codeigniter?

J'ai suivi cet article: http://philsturgeon.co.uk/blog/2012/05/composer-with-codeigniter

Mais je reçois Fatal error: Class 'Buzz\Browser' not found.

Que manque-t-il à son poste?

Mon contrôleur ou mon application ne sont pas namespaced. J'espérais pouvoir utiliser ce package dans l'action d'un contrôleur dans un framework non-namespaced.

12
Tjorriemorrie

Merci à @jmadsen

Ceci est possible en obtenant juste l'ordre de chargement correct:

/*
 * --------------------------------------------------------------------
 * 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 */
33
Tjorriemorrie

Pour CodeIgniter 3.x et le compositeur, il est suggéré de définir simplement $config['composer_autoload'] sur TRUE ou un chemin personnalisé dans application/config/config.php.

Il semble que CI suppose que le répertoire vendor se trouve dans le répertoire application. Ce n'était pas mon cas. J'ai fait ce qui suit:

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

23
SeanWM

EDIT: Zut, je viens de dire à peu près exactement la même chose que @Tjorriemorrie

Si vous avez suivi toutes les autres instructions correctement, il vous suffit d’ajouter le code suivant près de la fin votre fichier index.php:

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

... assurez-vous simplement de le placer dans avant le fichier CodeIgniter Bootstrap s'appelle:

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

Vous pouvez ajouter directement le Composer Autoloder dans votre contrôleur:

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

Bien dans Codeigniter3.x, vous pouvez facilement le faire en allant dans application/config/config.php et en recherchant cette ligne. 

$config['composer_autoload'] = FALSE;

Assurez-vous de le définir sur VRAI et juste après, vous avez besoin de ce qui suit:

require_once APPPATH.'vendor/autoload.php';

Donc, vous obtenez quelque chose comme ça: 

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

Assurez-vous simplement que votre dossier de fournisseur figure dans le dossier de l'application et que vous êtes prêt à partir.

J'ai récemment découvert que vous pouvez simplement définir $ config ['composer_autoload'] = TRUE; et mettez votre dossier de fournisseur dans le dossier de l'application et c'est tout.

2
Oteng Kwame

J'utilise Kenjis codeigniter composer package , et il supprime le répertoire du fournisseur de la racine. Puisqu'il n'y a pas de constante prédéfinie (que je sache) pour la racine, j'ai utilisé ce qui suit:

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

Il existe deux manières de charger automatiquement le fichier de classe requis à l'aide de composer.

  1. Ajoutez la ligne ci-dessous dans index.php dans le répertoire racine. 

    require FCPATH . 'vendor/autoload.php';
    
  2. Ou charger automatiquement directement dans le contrôleur où vous souhaitez utiliser. 

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