Я хочу расширить функциональность моего проекта CodeIgniter, интегрируя некоторый код, написанный в laravel? как я могу приблизиться, могу ли я включить код через библиотеку в CodeIgniter? Если да, то как? Я хочу включить контроллеры и ORM в CI.
Код Laravel – это своего рода api-приемник с функцией переговоров с другими сторонними службами.
Да, вы можете использовать композитор для установки 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
templating в Code Igniter. Создайте новый файл MY_Loader
в своем каталоге application/core
MY_Loader
с помощью этого кода.
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
blade.php
.
//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('dm-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 )); } }