Bisakah kita mengintegrasikan proyek Laravel sebagai perpustakaan di CodeIgniter?

Saya ingin meningkatkan fungsionalitas proyek CodeIgniter saya dengan mengintegrasikan beberapa kode yang ditulis di laravel? bagaimana pendekatannya, Bisakah saya memasukkan kode melalui perpustakaan di CodeIgniter? Jika ya Bagaimana? Saya hanya ingin memasukkan pengontrol dan ORM ke dalam CI.

Kode Laravel adalah sejenis pengambil api dengan fungsi pembicaraan dengan layanan pihak ketiga lainnya.


person Puneet    schedule 17.01.2016    source sumber
comment
Itu sepenuhnya tergantung pada kode yang Anda miliki. Jika menggunakan banyak kelas dan helper khusus Laravel, Anda perlu menulis banyak wrapper untuk kelas tersebut di CI atau menulis ulang perpustakaan Laravel Anda untuk menggunakan kelas CI dan helper. Biasanya lebih mudah untuk menulis ulang seluruhnya di CI.   -  person Magnus Eriksson    schedule 17.01.2016
comment
Anda ingin menambahkan seluruh aplikasi? Atau mungkin Anda bisa mendapatkan beberapa fungsi seperti Eloquent ORM dan pengontrol yang menggunakannya untuk mengambil data dari database? Harap lebih spesifik apa yang dilakukan kode laravel. Sebab jika Anda hanya menggunakannya untuk mengirim permintaan API ke layanan pihak ketiga Anda cukup menyertakan Guzzle atau yang serupa.   -  person naneri    schedule 17.01.2016
comment
Pembungkusan hanya dapat dilakukan melalui perpustakaan? ada pendekatan lain yang mungkin?@MagnusEriksson   -  person Puneet    schedule 17.01.2016


Jawaban (1)


Ya, Anda dapat menggunakan komposer untuk menginstal modul/proyek khusus Laravel, proyek pihak ketiga di CodeIginter Anda. Cukup sertakan autoload dalam file `index.php' Anda di atas

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

Saya menggunakan Eloquent sebagai ORM di basis kode CodeIgniter saya.

Buat peta kelas ke direktori aplikasi Anda di composer.json

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

Gunakan Fasih

Untuk menggunakan Eloquent, Anda perlu membuat perpustakaan untuk menyiapkan Eloquent untuk digunakan.

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

Sekarang muat perpustakaan secara otomatis, dan Anda akan mendapatkan keindahan yang fasih.

Demikian pula, Anda dapat menggunakan MonoLog untuk logging, Whoops untuk tampilan kesalahan, Formers\Former untuk pembuatan formulir, dll.

Gunakan Ups

Anda dapat menempatkan kode ini di suatu tempat setelah autload dan mendefinisikan Lingkungan CI di index.php Anda untuk menggunakan https://github.com/filp/whoops perpustakaan

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

Anda juga dapat memperluas CI_Router untuk menggunakan perutean gaya Laravel di aplikasi Code Igniter Anda.

Templat Pisau

Anda dapat memperluas CI_Loader untuk menggunakan template Blade di Code Igniter. Buat file baru MY_Loader di direktori application/core Anda dengan kode ini.

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

Anda mungkin harus membuat file konfigurasi blade.php di direktori application/config Anda untuk menyimpan blade konfigurasi tertentu.

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

Sekarang Anda dapat melakukan hal seperti ini di pengontrol Anda

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