Can we Integrate Laravel project as a library in CodeIgniter? Can we Integrate Laravel project as a library in CodeIgniter? codeigniter codeigniter

Can we Integrate Laravel project as a library in CodeIgniter?


Yes you can use composer to install Laravel specific modules/projects, third-party projects in your CodeIginter. Just include autoload in your `index.php' file at top

// Composer autoloadrequire_once __DIR__.'/vendor/autoload.php';

I am using Eloquent as ORM in my CodeIgniter codebase.

Create a classmap to your app directory in composer.json

"autoload": {    "psr-4": { "YourApp\\": ["application/"] },

Use Eloquent

To use Eloquent, you will require to create a library to setup Eloquent for use.

/** * Capsule setting manager for Illuminate/database */use Illuminate\Database\Capsule\Manager as CapsuleManager;use Illuminate\Events\Dispatcher;use Illuminate\Container\Container;class Capsule extends CapsuleManager {  public function __construct()  {    parent::__construct();    //Loaded by CI    if(function_exists('get_instance')) {      $ci = &get_instance();      $db = new stdClass;      $db = $ci->db;    } else {      require_once __DIR__.'/../config/database.php';      $db = (object) $db['default'];    }    $this->addConnection(array(      'driver'    => $db->dbdriver,      'host'      => $db->hostname,      'database'  => $db->database,      'username'  => $db->username,      'password'  => $db->password,      'charset'   => $db->char_set,      'collation' => $db->dbcollat,      'prefix'    => $db->dbprefix,    ));    $this->setEventDispatcher(new Dispatcher(new Container));    // Make this Capsule instance available globally via static methods... (optional)    $this->setAsGlobal();    // Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())    $this->bootEloquent();  }}// END Capsule Class

Now load the auto load the library, and you have the eloquent beauty.

Similarly, you can use MonoLog for logging, Whoops for error display, Formers\Former for form building etc.

Use Whoops

You can place this code somewhere after autload and defining CI Environment in your index.php to use beautiful https://github.com/filp/whoops library

if (ENVIRONMENT == 'development') {    $whoops = new \Whoops\Run;    $whoops->pushHandler(new Whoops\Handler\PrettyPageHandler());    $whoops->register();}

You can also extend CI_Router to use Laravel style routing in your Code Igniter app.

Blade Templating

You can extend the CI_Loader to use Blade templating in Code Igniter. Create a new file MY_Loader in your application/core directory with this code.

use Illuminate\Blade\Environment;use Illuminate\Blade\Loader;use Illuminate\Blade\View;class MY_Loader extends CI_Loader {    public function __construct()    {        parent::__construct();    }    public function blade($view, array $parameters = array())    {        $CI =& get_instance();        $CI->config->load('blade', true);        return new View(            new Environment(Loader::make(                $CI->config->item('views_path', 'blade'),                $CI->config->item('cache_path', 'blade')            )),            $view, $parameters        );    }}

You may have to create a config file blade.php in your application/config directory to store blade specific configurations.

//config/blade.php$config['views_path'] = APPPATH . 'views/blade/';$config['cache_path'] = APPPATH . 'cache/blade/';

Now you can do something like this in your controller

class Home extends CI_Controller {    public function index()    {        // Prepare some test data for our views        $array = explode('-', date('d-m-Y'));        list($d, $m, $y) = $array;        // Basic view with no data        echo $this->load->blade('home.index');        // Passing a single value        echo $this->load->blade('home.index')->with('day', $d);        // Multiple values with method chaining        echo $this->load->blade('home.index')             ->with('day', $d)             ->with('month', $m)             ->with('year', $y);        // Passing an array        echo $this->load->blade('home.index', array(            'day' => $d,            'month' => $m,            'year' => $y        ));    }}