Можем ли мы интегрировать проект Laravel как библиотеку в CodeIgniter?

Я хочу увеличить функциональность моего проекта CodeIgniter, интегрировав некоторый код, написанный на laravel? как мне подойти, могу ли я включить код через библиотеку в CodeIgniter? Если да Как? Я хочу включить в ЭК только контроллеры и ORM.

Код Laravel — это своего рода сборщик API с функциями, которые общаются с другими сторонними сервисами.


person Puneet    schedule 17.01.2016    source источник
comment
Это полностью зависит от кода, который у вас есть. Если он использует много специфичных для Laravel классов и помощников, вам нужно будет написать много оболочек для них в CI или переписать вашу библиотеку Laravel, чтобы вместо этого использовать CI-классы и помощники. Обычно проще просто полностью переписать его в CI.   -  person Magnus Eriksson    schedule 17.01.2016
comment
Вы хотите добавить все приложение? Или, может быть, вы можете просто получить несколько функций, таких как Eloquent ORM и контроллеры, которые используют его для получения данных из базы данных? Пожалуйста, уточните, что делает код laravel. Потому что, если вы просто используете его для отправки запросов API сторонним службам, вы можете просто включить Guzzle или что-то подобное.   -  person naneri    schedule 17.01.2016
comment
Обертка возможна только через библиотеку? возможен ли другой подход? @MagnusEriksson   -  person Puneet    schedule 17.01.2016


Ответы (1)


Да, вы можете использовать композитор для установки конкретных модулей/проектов Laravel, сторонних проектов в ваш CodeIginter. Просто включите autoload в файл index.php вверху.

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

Я использую Eloquent в качестве ORM в своей кодовой базе CodeIgniter.

Создайте карту классов в каталоге вашего приложения в composer.json

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

Используйте красноречивый

Чтобы использовать Eloquent, вам потребуется создать библиотеку для настройки Eloquent для использования.

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

Теперь загрузите автозагрузку библиотеки, и у вас есть красноречивая красота.

Точно так же вы можете использовать MonoLog для ведения журнала, Whoops для отображения ошибок, Formers\Former для построения форм и т. д.

Используйте

Вы можете разместить этот код где-нибудь после autload и определить среду CI в своем index.php, чтобы использовать красивые https://github.com/filp/whoops библиотека

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

Вы также можете расширить CI_Router, чтобы использовать маршрутизацию в стиле Laravel в своем приложении Code Igniter.

Шаблоны лезвий

Вы можете расширить CI_Loader, чтобы использовать шаблоны Blade в Code Igniter. Создайте новый файл MY_Loader в каталоге application/core с помощью этого кода.

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
        );
    }
}

Возможно, вам придется создать файл конфигурации blade.php в вашем каталоге application/config для хранения конкретных blade конфигураций.

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

Теперь вы можете сделать что-то подобное в своем контроллере

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
        ));
    }
}
person Ehs4n    schedule 17.01.2016