เราสามารถรวมโครงการ Laravel เป็นไลบรารีใน CodeIgniter ได้หรือไม่

ฉันต้องการเพิ่มฟังก์ชันการทำงานของโครงการ CodeIgniter ของฉันโดยการรวมโค้ดบางส่วนที่เขียนด้วย laravel หรือไม่ ฉันจะเข้าใกล้ได้อย่างไร ฉันสามารถรวมโค้ดผ่านไลบรารี่ใน CodeIgniter ได้หรือไม่ ถ้าใช่ ทำอย่างไร? ฉันต้องการรวมตัวควบคุมและ ORM ไว้ใน CI เท่านั้น

โค้ด Laravel เป็นตัวเรียก API ชนิดหนึ่งที่มีการพูดคุยฟังก์ชันกับบริการของบุคคลที่สามอื่นๆ


person Puneet    schedule 17.01.2016    source แหล่งที่มา
comment
มันขึ้นอยู่กับรหัสที่คุณมีโดยสิ้นเชิง หากใช้คลาสและตัวช่วยเฉพาะของ Laravel จำนวนมาก คุณจะต้องเขียน wrapper จำนวนมากสำหรับพวกมันใน 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 ของฉัน

สร้าง classmap ไปยังไดเรกทอรีแอปของคุณใน 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