2015-09-22 3 views
2

У меня есть приложение Laravel, которое я использую как API для гораздо большего приложения, встроенного в Joomla. Мне очень нравится использовать Laravel и решил использовать Eloquent в приложении Joomla. Я получил эту работу за счет импорта bootstrap\autoload.php файл в приложении Laravel и создание CapsuleИспользование Laravel Фасады за пределами Laravel

require JPATH_ROOT.'/../laravel_app/bootstrap/autoload.php'; 

$capsule = new Capsule(); 
$config = new JConfig(); 

$capsule->addConnection([ 
    'driver' => 'mysql', 
    'host'  => $config->host, 
    'database' => $config->db, 
    'username' => $config->user, 
    'password' => $config->password, 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => $config->dbprefix, 
    'strict' => false 
]); 

$capsule->setAsGlobal(); 
$capsule->bootEloquent(); 

Это прекрасно работает, и я могу использовать красноречив. Он напрямую загружает модели Eloquent из приложения.

Что я хочу знать, так это то, как я получаю остальную часть приложения Laravel, работающую внутри моего приложения Joomla, включая использование Facades.

Например, у меня есть Config.get('key') в одной из моделей Eloquent, отлично работает при вызове в Laravel, но вызывается и вызывается при вызове в Joomla.

Fatal error: Class 'Config' not found in laravel_app/app/Model.php on line 192 
+0

Я не знаю, как вы можете заставить его работать, но глядя на сообщение об ошибке, которое вы забыли: '' 'использовать Congif;' '' для импорта! Пожалуйста, сделайте это первым, а затем уточните, что вы задаете вопрос с этой информацией. – ArjanSchouten

+0

Как упоминалось, он работает в Laravel, поэтому «use Config;» не был забыт. 'Config' - это Facade, поэтому, даже если я импортировал целевой класс в Joomla, я все еще не мог использовать его как Facade – Wasim

+0

Прошу прощения, что я ошибся в вашем сообщении об ошибке. Думал, что это была ошибка об пространствах имен. – ArjanSchouten

ответ

1

Я посмотрел на laravel_site/public/index.php, чтобы увидеть, как он инициирует применение и до сих пор так хорошо это, кажется, рабочий раствор:

require JPATH_ROOT.'/../laravel_site/bootstrap/autoload.php'; 
$app = require_once JPATH_ROOT.'/../laravel_site/bootstrap/app.php'; 

$kernel = $app->make('Illuminate\Contracts\Http\Kernel'); 

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture() 
); 

//$response->send(); 

//$kernel->terminate($request, $response); 

Фасады в настоящее время, кажется, работает нормально. Я специально упустил $response->send(); и $kernel->terminate($request, $response);, так что маршрутизация не выполняется и переопределяет собственную маршрутизацию Joomla.

Мне также больше не нужно создавать экземпляр Capsule, поскольку Laravel делает это для меня сейчас.

Я не тестировал это полностью, поэтому я не знаю, насколько он прочен или какие функции будут работать, но пока все хорошо.

Смежные вопросы